我有时会看到一个接受对象作为参数的函数,该对象具有“!”作为后缀。 我知道这意味着该参数是一个隐式解包的可选参数。 但我不知道这两种情况有什么区别。即用“!”定义参数并且没有“!”。
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)
因此函数 tame 和 tame2 之间没有区别。 如果参数有可能为nil,我应该把参数定义为可选的吧?
func tame3(cat: Cat?) {
if let cat = cat {
print("Hi, \(cat.name)")
}
}
在什么情况下,我应该将函数的参数定义为像 tame2 这样的隐式解包可选?
最佳答案
In which case should I define a function's parameter as implicitly unwrapped optional like
tame2
?
简短回答:从不。
If the parameter has a possibility of being
nil
, I should define the parameter as an optional right?
没错。
隐式展开的可选项对于无法在 init
方法中初始化但应该始终具有值的属性很有用,并且为了将 Objective-C API 桥接到 Swift 的兼容性,没有别的。
关于Swift:用 '!'定义函数参数有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48473681/