检查 nil 的非可选值

Posted

技术标签:

【中文标题】检查 nil 的非可选值【英文标题】:Check Non Optional value for nil 【发布时间】:2018-06-20 15:42:14 【问题描述】:

我正在快速创建一个函数来检查如果非可选值返回 nil。我的目标只是处理该异常并避免应用程序因意外的 nil 值而崩溃。

我的班级有两个变量:

// My Class variables
var compulsoryValue: Any!

我不想检查optionalValue 为零。编译器返回 Optional.noneOptional.some 枚举而不是 nil 或某个值。

我的问题:

我面临的问题是我无法检查此值是否为空。至于清空编译器返回none,而对于value,它返回一些在SwiftOptional Enum 中定义的内容。 Implicitly Unwrapped Optional 只是抛出一个错误,而它有一个 nil 值。

我如何检查应该作为非可选值的值 nil?

更新#1:

我的代码:

class myClass 

    var compulsoryValue: Any!

    init() 

          if type(of: compulsoryValue) != Optional<Any>.self 
                // Here I want to check if compulsoryValue is nil so I want to throw an exception
                print("this is not optional: ", compulsoryValue)
            
    


_ = myClass()

【问题讨论】:

显示您需要帮助的实际代码。 请检查我的代码,我想在它为 nil 时抛出异常,这应该是非可选值。 为什么需要这个?当变量仍然为 nil 时,任何尝试使用隐式解包变量都会自动导致异常。无需编写复杂的代码来检查自己。 它没有显示nil 它显示none 并且应用程序因此而崩溃。 如果要查看,请使用if compulsoryValue == nil // it's nil, do something 【参考方案1】:
class myClass 

    var compulsoryValue: Any!
    var optionalValue: Any?

    init() 

        let variabless = [compulsoryValue, optionalValue]



        for (_, v) in variabless.enumerated() 

            if(v != nil)  //Or v == nil
                 // Here I want to check if v is nil so I want to throw an exception
                print("this is not optional: ", v)
            
            
    


_ = myClass()

【讨论】:

请不要与可选值混淆,我只想检查var compulsoryValue: Any!,不会被nil check检查。 @developer compulsoryValue 怎么不会被nil 检查?声明一个变量non-optional 只是告诉编译器相信你总是会提供一些价值。但它与检查 nil 或 value 无关。 是的,但从某种意义上说,它可以设置为 nil,编译器将设置为 nil。我想检查一下。 是的,这就是上面的回答代码正在做的事情。它会告诉你你的非可选变量是否为 nil。

以上是关于检查 nil 的非可选值的主要内容,如果未能解决你的问题,请参考以下文章

为啥你可以在 Swift 中为可选类型分配非可选值?

用返回非可选值的计算属性覆盖返回可选值的计算属性

Option可选值可选值

Swift 中的非英文字符给出:致命错误:在展开可选值时意外发现 nil

Swift - 将 nil 核心数据字符串转换为可选值

为啥我收到错误:致命错误:在展开可选值时意外发现 nil?