let alertControllerLoad = UIAlertController()
let alertViewLoad = UIAlertView()
这些都是在我的收件箱类中建立的全局变量。我在调用UIAlertController之前检查设备是否是iOS8或更高版本,但由于它在类中创建了UIAlertController的实例,因此它在ios7设备上崩溃。我需要它们作为全局变量,因为我从多个函数调用它们。有没有使用init()的工作,或者这是一个没有解决方法的东西。
答案 0 :(得分:0)
不幸的是,在Swift中没有预处理器调用,Swift可以基于仅在今天的两个函数中对构建配置的评估进行有条件的编译。
os()用于选择OSX或iOS和arch()以选择x86_64,arm,arm64或i386。
因此,您无法使用Objective-C#if / #endif条件来检查iOS版本。
但我认为你可以制作一个技巧,因为你不需要知道确切的iOS版本,但只有UIAlertController
存在。您可以通过以下方式检查它:
if (objc_getClass("UIAlertController") == nil) {
// iOS 7
} else {
// iOS 8+
}
然后您不需要对UIAlertController
或UIAlertView
进行全局引用,而是从if
内部实例化它们并调用它们。
答案 1 :(得分:0)
对于任何可能偶然发现此事的人,
班级警报{
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
var iOS8Up: Bool = true
lazy var alertControllerLoad = Alerts.set()
let alertViewLoad = UIAlertView()
class func set() -> UIAlertController {
//get the device model to know what image to post for refresh
var device : UIDevice = UIDevice.currentDevice();
var systemVersion = device.systemVersion;
let numberFormatter = NSNumberFormatter()
let systemVersionNumber = numberFormatter.numberFromString(systemVersion)
let systemVersionFloatValue = systemVersionNumber!.floatValue
if(systemVersionFloatValue < 8.0) {
return UIAlertController(title: "title", message: "message", preferredStyle: UIAlertControllerStyle.Alert)
}
else{
//returns with actionSheet as preferredStyle
//will crash on anything less than iOS8
return UIAlertController()
}
}
}
这允许您将AlertController设置为全局变量,即使您正在运行iOS7。我在这个问题上花了太长时间。