在 Swift 4 中的 systemDouble 值中查找 nil

Posted

技术标签:

【中文标题】在 Swift 4 中的 systemDouble 值中查找 nil【英文标题】:Finding nil in systemDouble value in Swift 4 【发布时间】:2018-03-16 19:53:06 【问题描述】:

我正在尝试在 Swift 4 中查找当前系统版本,我有一个标签,我将设置为“更新”或“未更新”,具体取决于当前 ios 版本是 >= 11.2 还是

这在模拟器中工作得很好,但是当我在我的 iPhone X 上运行它时,它返回一个错误说:“线程 1:致命错误:在展开可选值时意外发现 nil”,说明 systemDouble 等于零。

我试过说 if systemDouble != nil 和 if systemDouble == nil,但似乎没有任何效果。

任何帮助将不胜感激,谢谢

代码如下:

@IBOutlet weak var updateStatus: UILabel!


let systemVersion = UIDevice.current.systemVersion
let systemDouble = Double(systemVersion)



if (updateStatus  != nil && systemDouble! >= 11.2)


    updateStatus.text! = "Updated"
    updateStatus.textColor = UIColor.green


else if (updateStatus != nil && systemDouble! < 11.2)

    updateStatus.text! = "Not Updated" + String (systemVersion)
    updateStatus.textColor = UIColor.red


【问题讨论】:

UIDevice.current.systemVersion 返回String。如果操作系统类似于"10.0.1",它将返回nil 我建议改用ProcessInfo().operatingSystemVersion.majorVersion。也可以查看minorVersionpatchVersion @LeoDabus 工作就像一个魅力!由于某种原因,minorVersion 和 patchVersion 似乎分别返回 2.0 和 6.0,但 majorVersion 返回 11,这是我需要的,谢谢。 【参考方案1】:

systemVersion 是一个字符串,不保证可以转换为数字。所以当你强行打开它时,你会得到一个错误。

我建议改用if #available(iOS 11.2, *)

【讨论】:

以上是关于在 Swift 4 中的 systemDouble 值中查找 nil的主要内容,如果未能解决你的问题,请参考以下文章

Swift 4 中的私有和文件私有有啥区别

如何在Swift 4中的watchOS 4上激活振动

在 iOS Swift 中,在 Swift 4 中的 TableView 中为 CollectionView 集成不同的数组

在 Swift 3.0 (Alamofire 4.4.0) 中的一些请求后,Alamofire 停止工作

Swift 4 中的 AlamofireImage 问题

BOOL 与 Swift 4.1 中的 Bool 不兼容