我有时会看到一个接受一个对象作为参数的函数,该参数有'!'作为后缀。 我知道这意味着参数是一个隐式解包的可选项。 但我不知道这两种情况有什么区别。即用'!'定义参数没有'!'。
class Cat {
var name: String
init(name: String) {
self.name = name
}
}
func tame(cat: Cat) {
print("Hi, \(cat.name)")
}
func tame2(cat: Cat!) {
print("Hi, \(cat.name)")
}
let cat = Cat(name: "Jack")
tame(cat: cat)
tame2(cat: cat)
因此,功能驯服和tame2之间没有区别。 如果参数有可能是nil,我应该将参数定义为可选的权利吗?
func tame3(cat: Cat?) {
if let cat = cat {
print("Hi, \(cat.name)")
}
}
在哪种情况下,我应该将函数的参数定义为隐式展开的可选项,例如 tame2 ?
答案 0 :(得分:3)
在哪种情况下,我应该将函数的参数定义为隐式解包的可选项,如
tame2
?
简短回答:从不。
如果参数有可能是
nil
,我应该将参数定义为可选权利吗?
右。
隐式解包选项对于无法在init
方法中初始化但应该始终具有值的属性以及将Objective-C API桥接到Swift的兼容性非常有用,没有别的。