我正在構建一個應用程式,提示用戶輸入他們的聯系人。我是 Swift 的新手,但取得了不錯的進步。
我正在open從父呼叫站點呼叫此函式,并希望從該contactPicker函式接收回應值。我有點不熟悉contactPicker呼叫的隱含性質,并希望必須直接從presentContactPicker函式內部呼叫它,但檔案似乎表明這種方法更可取。
就目前而言,此實作正確提示 Contact Picker UI,并將所選聯系人列印到控制臺。但我需要幫助實際將聯系人傳遞給回呼函式。
我遇到的問題是我無法從 contactPicker 內部訪問回呼函式。我有一個也許我可以在回呼附加到父類與類似self.callback =回呼的技術直覺open功能,然后呼叫self.callback()的contactPicker本身,但它沒有作業。
import Foundation
import UIKit
import ContactsUI
@objc(ContactsPicker)
class ContactsPicker : NSObject, CNContactPickerDelegate {
@objc static func requiresMainQueueSetup() -> Bool {
return false
}
@objc func open(_ options: NSDictionary, callback: RCTResponseSenderBlock) -> Void {
DispatchQueue.main.async {
self._presentContactPicker(options: options)
}
}
func _presentContactPicker(options: NSDictionary) -> Void {
let contactPickerVC = CNContactPickerViewController()
contactPickerVC.delegate = self
let controller = RCTPresentedViewController()
controller?.present(contactPickerVC, animated: true)
}
func contactPicker(_ picker: CNContactPickerViewController, didSelect contacts: [CNContact]) {
print(" ")
print(contacts)
print(" ")
### But how can I access the callback from the exposed open method?
}
}
uj5u.com熱心網友回復:
也許我可以附加回呼到父類的技術,像
self.callback = callback在open函式,然后呼叫self.callback()在contactPicker本身
這是正確的想法。您可以宣告一個屬性來存盤回呼,如下所示:
private var callback: RCTResponseSenderBlock?
@objc func open(_ options: NSDictionary, callback: @escaping RCTResponseSenderBlock) -> Void {
self.callback = callback
DispatchQueue.main.async {
self._presentContactPicker(options: options)
}
}
請注意,由于回呼“轉義”到類中,您應該將引數標記為@escaping。
func contactPicker(_ picker: CNContactPickerViewController, didSelect contacts: [CNContact]) {
callback(someParameters)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/368537.html
