2
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)

请分享您对此的看法。但是,虽然我通常在项目中使用可选项,但它通常会给出警告 'Expression 从字符串隐式强制?去任何'

4

1 回答 1

4

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

let a = obj2.optVar

a被推断为 type String?,因为那是右边表达式的类型,不是吗?

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

可选值可以分配给可选类型的变量。没有错。

但是,如果您声明a为 type String,则需要将其解包:

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

'Expression implicitly coerced from String? to Any'当您尝试将可选值放入类型变量时会出现警告Any,如下所示:

let a: Any = obj2.optVar // warning!
于 2018-03-21T06:52:04.183 回答