如果我们尝试访问可选对象属性,我们可以这样做 -
var obj: Person
var str = obj.name? as Any
nil
这是在 swift3中处理案件的正确方法吗?
如果我们尝试访问可选对象属性,我们可以这样做 -
var obj: Person
var str = obj.name? as Any
nil
这是在 swift3中处理案件的正确方法吗?
目前还不太清楚你在问什么......但据我所知,你正在寻找一种方法来处理obj.name
nil 的情况。
你可以这样写:
if obj.name == nil {
// I am nil
} else {
// I am not nil
}
或者,如果您需要捕获非可选值,那么:
if let name = obj.name {
print(name) // I am not nil
} else {
// I am nil
}
而且我不知道你为什么要把它投到Any
——通常如果你能坚持使用具体的类型,你会为自己省去在路上的头痛和痛苦。
有两种方法可以快速处理 nil:
1. if-let 语句的使用
var obj: Person
if let name = obj.name {
var str = name
}
您还可以在此处检查变量的类型obj.name
var obj: Person
if let name = obj.name as? String {
var str = name
}
2.guard-let语句的使用
var obj: Person
guard let name = obj.name as? String else {
return
}
这两个条件之间的区别在于,if-let
在条件失败后(如果对象为 nil),代码将继续执行下一行代码,但guard-let
将停止执行并抛出返回。
注意:默认运算符??
您还可以实现默认“ operator: ??
”来分配默认值,例如:
var str = obj.name ?? ""
您可以尝试使用if let
if let name = obj.name as? String
{
print(name)
}
else
{
print("name is nil")
}
例如,如果你有你的Person
对象:
class Person {
var name: String?
}
let person = Person()
您可以通过name
以下几种方式使用属性:使用if-let
或?
运算符。
// if-let construction
if let personName = person.name {
print(personName.uppercased())
}
// `?` operator example
let uppercasedPersonName: String? = person.name?.uppercased()
你的情况if-let
更有可能是你想要的。