为什么 optional 不发出警告或要求强制展开?
Why optional is not giving warning or asking for force unwraping?
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 implicitly coerced from String? to Any'
这主要是由于类型推断。这里:
let a = obj2.optVar
a
被推断为 String?
类型,因为那是右边表达式的类型,不是吗?
// basically this:
let a: Optional<String> = obj2.optVar
可选值可以赋给可选类型的变量。没有错。
如果您将 a
声明为 String
类型,但是,您需要将其解包:
let a: String = obj2.optVar // error!
当您尝试将可选值放入 Any
类型的变量时,会出现警告 'Expression implicitly coerced from String? to Any'
,如下所示:
let a: Any = obj2.optVar // warning!
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 implicitly coerced from String? to Any'
这主要是由于类型推断。这里:
let a = obj2.optVar
a
被推断为 String?
类型,因为那是右边表达式的类型,不是吗?
// basically this:
let a: Optional<String> = obj2.optVar
可选值可以赋给可选类型的变量。没有错。
如果您将 a
声明为 String
类型,但是,您需要将其解包:
let a: String = obj2.optVar // error!
当您尝试将可选值放入 Any
类型的变量时,会出现警告 'Expression implicitly coerced from String? to Any'
,如下所示:
let a: Any = obj2.optVar // warning!