8

我在 swift 文件中有这个变量:

var adbk: ABAddressBook!

这一直很好,直到 Xcode 7.1。现在它抱怨“具有保留或强属性的属性必须是对象类型。” 错误在-Swift.h文件中。知道发生了什么变化会导致这种情况以及如何解决它吗?

4

2 回答 2

3

如果 Swift 类声明了一些 AdressBook 属性并且该类是混合 Swift / ObjC 项目的一部分,则会发生此错误。然后 Xcode 生成 Swift 桥接头,该属性变为 (nonatomic, strong),仅适用于对象,不适用于结构。

当我需要将 ABRecordRef 从 Objective-C 类传递给 Swift 类时,我遇到了类似的问题:Xcode 不喜欢我在 Swift 中的 ABRecordRef 属性。所以我最终将该属性设为私有,以便它不会导出到桥接头,并在 Swift 类中添加新方法来接收 ABRecordRef:

    class: PersonDetails {

       private var selectedPerson: ABRecorfRef?

       func setPerson(person: ABRecordRef) {
          selectedPerson = person
       }
    }

然后你可以打电话

[personDetails setPerson: person];

来自 Objective-C 类。

于 2015-11-20T21:27:05.117 回答
0

ABAddressBook 已弃用

@available(iOS, introduced=2.0, deprecated=9.0, message="use CNContactStore")
public typealias ABAddressBookRef = ABAddressBook

所以我认为你必须使用 CNContactStore

于 2015-12-15T05:14:16.993 回答