2015-10-23 33 views
7

我有一个快速的文件这个变量:的Xcode 7.1:房产与保留或强属性必须是对象类型

var adbk: ABAddressBook! 

这一直很好,直到Xcode的7.1。现在它抱怨说:“保留或强属性的属性必须是对象类型。”该错误位于-Swift.h文件中。任何想法是什么改变了会导致这种情况,以及如何解决它?

+1

你不应该存储ABAddressBookRef呢? ABAddressBook是一个结构体。要么摆脱!通过在init中分配它或使用?如果它可能没有设置。 –

+0

它有时可能是零。我改变了它?并仍然有相同的错误。并将其更改为ABAddressBookRef也无济于事。 – RyJ

+0

这可能是Apple强迫我转换到CNContactStore的微妙方式。 – RyJ

回答

3

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

当我需要将ABRecordRef从Objective-C类传递到Swift类时,我遇到了类似的问题:Xcode不喜欢我在Swift中的ABRecordRef属性。所以,我最终使该财产私有的,所以它不会出口到桥接报头,并在斯威夫特类中添加新的方法来接收ABRecordRef:

class: PersonDetails { 

     private var selectedPerson: ABRecorfRef? 

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

然后你就可以调用

[personDetails setPerson: person]; 
来自Objective-C类的

0

ABAddressBook已被弃用

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

,所以我认为你必须使用CNContactStore

相关问题