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

时间:2015-10-23 19:10:16

标签: xcode swift xcode7.1

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

restore items

一直很好,直到Xcode 7.1。现在它抱怨“具有retain或strong属性的属性必须是对象类型。”错误发生在var adbk: ABAddressBook! 文件中。知道改变了什么会引起这种情况以及如何解决它?

2 个答案:

答案 0 :(得分:3)

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

当我需要将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类。

答案 1 :(得分:0)

不推荐使用ABAddressBook

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

所以我认为你必须使用CNContactStore