如何在 iOS7 兼容设备上使用 UIAlertController() 作为全局变量?

How to use UIAlertController() as global variable on iOS7 compatible devices?

let alertControllerLoad = UIAlertController()
let alertViewLoad = UIAlertView()

这些都是在我的收件箱中作为全局变量建立的class。我在调用 UIAlertController 之前检查设备是否为 iOS8 或更高版本,但由于它在 class 中创建了 UIAlertController 的实例,因此它在 ios7 设备上崩溃。我需要它们是全局变量,因为我从多个函数中调用它们。是否有解决使用 init() 的方法,或者这是没有解决方法的方法。

不幸的是,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+
}

那么您不需要全局引用 UIAlertControllerUIAlertView,而是从 if 内部实例化它们并调用。

对于可能偶然发现此问题的任何其他人,

class 警报 {

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()
    }


}

}

即使您是 运行 iOS7,这也允许您将 AlertController 设置为全局变量。我在这个问题上花了太长时间。