如果我们正在尝试访问可选对象属性,我们可以这样做 -
var obj: Person
var str = obj.name? as Any
这是在swift3中处理nil
个案的正确方法吗?
答案 0 :(得分:1)
您可以尝试使用if let
if let name = obj.name as? String
{
print(name)
}
else
{
print("name is nil")
}
答案 1 :(得分:1)
你要问的是什么并不太清楚......但是我可以告诉你,正在寻找一种方法来处理obj.name
为零的情况。
你可以这样写:
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
- 一般来说,如果你能坚持使用具体的类型,那么你将为自己省去头痛和痛苦。
答案 2 :(得分:1)
有两种方法可以在swift中处理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
代码将在条件失败后继续执行下一行代码(如果object为nil),但guard-let
将停止执行并将抛出返回。 / p>
注意:默认运营商??
您还可以实施默认&#34; operator: ??
&#34;用于分配默认值,如:
var str = obj.name ?? ""
答案 3 :(得分:0)
例如,如果您有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
更有可能是您想要的。