【问题标题】:Swift: Is there any difference in defining a function parameter with '!'Swift:用'!'定义函数参数有什么区别
【发布时间】:2018-07-06 12:29:41
【问题描述】:

我有时会看到一个函数接受一个对象作为参数,它有“!”作为后缀。 我知道这意味着参数是隐式展开的可选参数。 但我不知道这两种情况有什么区别。即用“!”定义参数并且没有'!'。

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 这样的隐式解包可选?

【问题讨论】:

标签: swift function parameters optional


【解决方案1】:

在哪种情况下,我应该将函数的参数定义为隐式展开的可选参数,例如 tame2

简短回答:从不。

如果参数有可能是nil,我应该把参数定义为可选的吧?

没错。


隐式解包选项对于无法在 init 方法中初始化但应该始终具有值的属性很有用,并且为了将 Objective-C API 与 Swift 连接起来的兼容性,仅此而已。

【讨论】:

  • 我明白了。非常感谢。
猜你喜欢
  • 2017-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-24
  • 2015-08-09
  • 1970-01-01
  • 2010-09-14
相关资源
最近更新 更多