-4

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

var obj: Person

var str = obj.name? as Any

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

4

4 回答 4

1

目前还不太清楚你在问什么......但据我所知,你正在寻找一种方法来处理obj.namenil 的情况。

你可以这样写:

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——通常如果你能坚持使用具体的类型,你会为自己省去在路上的头痛和痛苦。

于 2018-03-29T14:47:48.713 回答
1

有两种方法可以快速处理 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 ?? ""
于 2018-03-29T14:54:32.007 回答
1

您可以尝试使用if let

if let name = obj.name as? String
{
   print(name)
}
else
{
   print("name is nil")
}
于 2018-03-29T14:44:50.923 回答
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更有可能是你想要的。

于 2018-03-29T14:58:11.793 回答