如何根据操作系统版本创建实例变量

Ami*_*ngh 2 ios swift swift2

我如何基于iOS版本定义实例变量,例如CNContactStore,自从已弃用该实例变量以来iOS9.0,就不 可用了ABAddressBook9.0但是我想根据iOS版本创建两个变量。我的方法是

if #available(iOS 9.0, *) {
    var addressBookRef: ABAddressBook? = nil
} else {
    var contactStore : CNContactStore? = nil
}
Run Code Online (Sandbox Code Playgroud)

如果我在方法主体中执行此操作,则工作正常,但我希望对其进行全局定义,并且可以在整个类中进行访问,但如果这样做就给我错误

@available(iOS 9.0, *)
var contactStore : CNContactStore? = nil
Run Code Online (Sandbox Code Playgroud)

需要一些建议。我该如何实现。我不知道是否发布@available(iOS 9.0, *),它会导致我的应用在iOS 8.x或更低版本上崩溃吗?

cri*_*ega 5

在那种情况下,我将使用模仿ABAddressBook和CNContactStore行为的包装器类,因此对它们方法的所有调用都应通过此类进行。

快速查找所需内容的方法可能是这样的:

class ContactWrapper {
    var contactBook: NSObject?


    init() {
        if #available(iOS 9, *) {
            contactBook = CNContactStore.init()
        } else {
            contactBook = ABAddressBookCreate().takeRetainedValue() as? NSObject
        }

    }
}
Run Code Online (Sandbox Code Playgroud)