swift - 为什么可选不发出警告或要求强制解开?

标签 swift option-type forceunwrap

struct SomeStruct {
    var optVar : String?
    var nonOptVar : String = "Hello"
    var optvar2 : String!
}

let obj2 = SomeStruct(optVar: "a", nonOptVar: "b", optvar2: "c")
let a = obj2.optVar // why it is not asking for force unwraping
let b = obj2.nonOptVar
let c = obj2.optvar2
print(a)
print(b)
print(c)

请分享您对此的看法。但是,当我在项目中使用选项时,它通常会发出警告 '从字符串隐式强制表达式?到任何'

最佳答案

这主要是由于类型推断。这里:

let a = obj2.optVar

a推断为 String? 类型,因为这就是右边表达式的类型,不是吗?

// basically this:
let a: Optional<String> = obj2.optVar

可以将可选值分配给可选类型的变量。这没有什么问题。

如果您声明 a类型为String但是,您需要打开它:

let a: String = obj2.optVar // error!

警告'Expression implicitly coerced from String? to Any'当您尝试将可选值放入 Any 类型的变量时出现,像这样:

let a: Any = obj2.optVar // warning!

关于swift - 为什么可选不发出警告或要求强制解开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49399918/

相关文章:

swift - Property Observer swift 了解属性(property)的属性(property)

ios - swift 3 : How to assign variable of different option types without multiple if let statements?

java - if/else 的可选方式

swift - UIGraphicsGetImageFromCurrentImageContext() 给了我一个强制解包选项的链式 react ,我在 Swift 中不想要

swift - 为什么 @objc 枚举与纯 Swift 枚举的描述不同?

ios - UITapGestureRecognizer 未在 Swift 3 中触发

iOS:在 WebView 中播放嵌入式剪辑时静音

swift - 可选结构的非可选属性显示为可选

swift - 任何?不正确的语义