Swift可选的向下转换为Any

时间:2018-03-29 14:41:19

标签: ios swift swift3 optional-variables

如果我们正在尝试访问可选对象属性,我们可以这样做 -

var obj: Person

var str = obj.name? as Any

这是在swift3中处理nil个案的正确方法吗?

4 个答案:

答案 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更有可能是您想要的。