Swift 斯威夫特期权
我正在观看苹果公司的所有swift教程,但其中一个例子有问题:Swift 斯威夫特期权,swift,ios8,Swift,Ios8,我正在观看苹果公司的所有swift教程,但其中一个例子有问题: class Person { var residence: Residence? } class Residence { var address: Address? } class Address { var buildingNumber: String? = "234" var streetName: String? = "Main St." var appartmentNumber:
class Person {
var residence: Residence?
}
class Residence {
var address: Address?
}
class Address {
var buildingNumber: String? = "234"
var streetName: String? = "Main St."
var appartmentNumber: String?
}
let paul = Person()
var addressNumber: Int?
addressNumber = paul.residence?.address?.buildingNumber?.toInt()
if let number = addressNumber {
"correct"
} else {
"fault"
}
它总是打印出“错误”。有什么明显的东西我丢失了吗?除了
Person()
之外,你从来不初始化任何东西,所以paul
上的residence
属性是nil
let paul = Person()
addressNumber = paul.residence?.address?.buildingNumber?.toInt()
^ failing right here, residence? returns nil
因此,在以下可选链中:
addressNumber = paul.residence?.address?.buildingNumber?.toInt()
^ you get nil here and don't continue
这意味着addressNumber
是nil
let paul = Person()
addressNumber = paul.residence?.address?.buildingNumber?.toInt()
^ failing right here, residence? returns nil
您不需要对paul执行任何其他操作,包括设置他的可选居留变量。因此,在下一行代码中,您将访问paul
的住所nil
let paul = Person()
addressNumber = paul.residence?.address?.buildingNumber?.toInt()
^ failing right here, residence? returns nil
因此,使用可选链接,整个表达式返回
nil
,因此在下一个if let
语句中进行比较时,它是false。这就是执行else
子句的原因。一步一步地仔细考虑。特别是,您的可选链接:
addressNumber=paul.residence?.address?.buildingNumber?.toInt()
问问自己:
住宅属性设置为什么
住所的地址是什么
提示:您不应该通过第2步。如果您将代码更改为:
class Person {
// actually create a residence object
var residence: Residence? = Residence()
}
class Residence {
// actually create a address object
var address: Address? = Address()
}
class Address {
// ...
}
let paul = Person()
var addressNumber: Int?
// Before Paul was never assigned a valid residence, now one will be created
addressNumber = paul.residence?.address?.buildingNumber?.toInt()
if let number = addressNumber {
"correct"
} else {
"fault"
}
// gives you `correct`
那么它应该工作得很好 如果let number=addressNumber,什么是
?那是作业吗?“fault”是否表示赋值失败?是的,首先,residence
从未被赋值给一个非常明显的值。谢谢你,还有所有指出这一点的人@尼尔森-是的,没问题!我们每个人都会遇到这样那样的事情!