这是否意味着set操作不会读取Optional的实际值,因此不需要将其解包?
var str = "Hello, playground"
class Base{
var name:String?
};
var obj = Base()
obj.name = "hello" //this line don't need unwrapping first
答案 0 :(得分:1)
当您set
Optional
属性时,不必解包。
仅在将可选值分配给非可选属性时才需要解包:
var name: String = "" // non-optional
var str: String?
// this will not compile, because you need to unwrap str first
name = str
// this will compile, because we're providing a default value
name = str ?? ""
// this will also compile, because name is not an optional
// it would still compile if name was optional, because str is optional too
str = name
答案 1 :(得分:1)
可选是一个框。该框可以不包含任何内容(称为nil
),也可以包含特定类型的内容(在您的示例中为String
)。您展开可选即可访问框中的值。
将值分配给可选时,只需将值分配给框本身。无需拆开任何东西,因为您只是在输入值。如果您分配nil
,Swift要么清空该框,要么通过将其放入框中来包装该值。
解包是用于访问框中已经存在的值。
通过对其他答案的评论来回答您的问题...
但是为什么可选绑定不需要解包?我认为如果让constantName = some Optional也是一种赋值
可选绑定 是解包操作和分配操作。它说:“如果框内有一个值,则将其分配给该新变量,然后输入then子句,否则,如果存在则进入else子句。”
var optionalValue: String? = "hello"
if let value = optionalValue {
// value is the contents of the box, it has type String
print("value is \(value)")
} else {
// the optional binding failed because the box is empty
print("optionalValue is nil")
}