如何在 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+
}
那么您不需要全局引用 UIAlertController
或 UIAlertView
,而是从 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 设置为全局变量。我在这个问题上花了太长时间。
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+
}
那么您不需要全局引用 UIAlertController
或 UIAlertView
,而是从 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 设置为全局变量。我在这个问题上花了太长时间。