例如,如何基于iOS版本定义实例变量
自CNContactStore
以来iOS9.0
可用ABAddressBook
,9.0
已弃用if #available(iOS 9.0, *) {
var addressBookRef: ABAddressBook? = nil
} else {
var contactStore : CNContactStore? = nil
}
,但我想根据iOS版本创建两个变量。我的方法是
@available(iOS 9.0, *)
var contactStore : CNContactStore? = nil
如果我在方法体内执行此操作,工作正常但我希望它可以全局定义并且可以在整个类中访问但是如果我这样做会给我错误
@available(iOS 9.0, *)
需要一些建议。我如何实现这一目标。我不知道如果我发布import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
public class HelloByLogger {
private final static Logger logger = Logger.getLogger(HelloByLogger.class);
public static void main(String[] args) {
BasicConfigurator.configure();
logger.info("From Logger... Ola!");
}
}
,它会在iOS 8.x或更低版本上崩溃我的应用程序吗?
答案 0 :(得分:4)
在这种情况下,我会使用一个包装类来模仿ABAddressBook和CNContactStore行为,所以对它们的方法的所有调用都应该通过这个类来完成。
您正在寻找的快速方法可能是这样的:
class ContactWrapper {
var contactBook: NSObject?
init() {
if #available(iOS 9, *) {
contactBook = CNContactStore.init()
} else {
contactBook = ABAddressBookCreate().takeRetainedValue() as? NSObject
}
}
}