在已经有ObjC的项目中,我添加了一个Swift类
import AddressBookUI
class MyVC : UITableViewController, ABPeoplePickerNavigationControllerDelegate {
}
MyApp-Swift.h:289:42:无法找到' ABPeoplePickerNavigationControllerDelegate&#39 ;;你的意思是' UINavigationControllerDelegate'?
不,斯威夫特,我的意思是ABPeoplePickerNavigationControllerDelegate
。真想知道我在这里做错了什么......
答案 0 :(得分:1)
我需要添加
#import <AddressBookUI/AddressBookUI.h>
在我的Briding-Header.h
中。有人可能会认为我的Swift文件中的import
就足够了。事实并非如此。
那就是说,现在我在实施
时遇到了新问题func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, didSelectPerson person: ABRecord!, property: ABPropertyID, identifier: ABMultiValueIdentifier) {
}
接下来出现错误:
-Swift.h:297:110:预期类型
中的
ABRecord
类型存在问题
didSelectPerson:(ABRecord)
如果我还在Briding Header或Swift文件中导入AddressBook
,那么没有帮助。
答案 1 :(得分:1)
您可以查看我使用的代码here
对我来说,这是在不使用任何Bridging-Header
的情况下编译精细的import UIKit
import AddressBook
import AddressBookUI
class ViewController: UITableViewController, ABPeoplePickerNavigationControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, didSelectPerson person: ABRecord!, property: ABPropertyID, identifier: ABMultiValueIdentifier) {
}
}
我将相关框架(AddressBook,AddressBookUI)添加到链接二进制文件中,并使用库我的目标
阶段
My Bridging-Header.h:
#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>
答案 2 :(得分:1)
FWIW,在纯Swift中使用ABRecord
但在Objective-C兼容性标头中不起作用的原因是有一个typealias
,后者显然没有正确翻译回来:
typealias ABRecordRef = ABRecord
可能值得提交雷达
答案 3 :(得分:0)
通过@neonacho on Twitter解决了我的第二次问题。而不是ABRecord
我必须使用ABRecordRef
来编译。不确定为什么迭戈的代码可以工作而不是我的代码。所以它变成了
func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!,
didSelectPerson person: ABRecordRef!, property: ABPropertyID, identifier: ABMultiValueIdentifier) {
}
它有效。