Swift 可选向下转换为 Any
Swift optional downcasting as Any
如果我们尝试访问可选对象 属性 我们可以这样做吗 -
var obj: Person
var str = obj.name? as Any
这是在 swift3 中处理 nil
案例的正确方法吗?
您可以尝试使用 if let
if let name = obj.name as? String
{
print(name)
}
else
{
print("name is nil")
}
不太清楚你在问什么......但据我所知,你正在寻找一种方法来处理 obj.name
为零的情况。
你可以这样写:
if obj.name == nil {
// I am nil
} else {
// I am not nil
}
或者如果您需要捕获 non-optional 值,如何:
if let name = obj.name {
print(name) // I am not nil
} else {
// I am nil
}
而且我不确定你为什么要将它转换为 Any
- 一般来说,如果你能坚持使用具体的类型,你将避免自己在以后的道路上头疼和痛苦。
在swift中有两种处理nil的方法:
1.使用if-let语句
var obj: Person
if let name = obj.name {
var str = name
}
您还可以在此处检查 obj.name
变量的 type as
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
将停止执行并抛出 return.
注:默认运算符??
您还可以实现默认“operator: ??
”来分配默认值,例如:
var str = obj.name ?? ""
例如,如果您有 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
更有可能是你想要的。
如果我们尝试访问可选对象 属性 我们可以这样做吗 -
var obj: Person
var str = obj.name? as Any
这是在 swift3 中处理 nil
案例的正确方法吗?
您可以尝试使用 if let
if let name = obj.name as? String
{
print(name)
}
else
{
print("name is nil")
}
不太清楚你在问什么......但据我所知,你正在寻找一种方法来处理 obj.name
为零的情况。
你可以这样写:
if obj.name == nil {
// I am nil
} else {
// I am not nil
}
或者如果您需要捕获 non-optional 值,如何:
if let name = obj.name {
print(name) // I am not nil
} else {
// I am nil
}
而且我不确定你为什么要将它转换为 Any
- 一般来说,如果你能坚持使用具体的类型,你将避免自己在以后的道路上头疼和痛苦。
在swift中有两种处理nil的方法:
1.使用if-let语句
var obj: Person
if let name = obj.name {
var str = name
}
您还可以在此处检查 obj.name
变量的 type as
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
将停止执行并抛出 return.
注:默认运算符??
您还可以实现默认“operator: ??
”来分配默认值,例如:
var str = obj.name ?? ""
例如,如果您有 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
更有可能是你想要的。