Xcode 7.1:具有retain或strong属性的属性必须是对象类型

RyJ*_*RyJ 7 xcode swift xcode7.1

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

var adbk: ABAddressBook!
Run Code Online (Sandbox Code Playgroud)

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

Jee*_*ton 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
       }
    }
Run Code Online (Sandbox Code Playgroud)

然后你可以打电话

[personDetails setPerson: person];
Run Code Online (Sandbox Code Playgroud)

来自 Objective-C 类。