【问题标题】:What String'!' means in Swift when used as a parameter?什么字符串'!用作参数时在 Swift 中是什么意思?
【发布时间】:2014-06-13 14:30:42
【问题描述】:

好吧,var s: String? 表示可以为空的字符串,当我知道 s 不是 null 时,我使用 s!

但是,例如init(parameter: String!) 是什么意思?

【问题讨论】:

  • 嗯,大概意思是一样的——parameter 不能为空。 (大概对调用者强制执行。)
  • 使用这种(逻辑)思维,init(par: String) 和 init(par: String?) 是一样的
  • 那么你能声明其他var s: String!是一个变量吗? (我不知道任何斯威夫特...)

标签: swift


【解决方案1】:

这意味着可选参数将被隐式解包。

因此你可以做类似的事情

class Person {
var name : String
init(_ n : String!) {
    name = n
}
}
var name : String? = ...
var px = Person(name)

【讨论】:

  • 请注意,这与显式解包不同。如果你写名字!当它为None时,它会崩溃,但如果你传递Type类型的参数!即使您通过无,它也可能有效。示例: func test(param: String!) { println(param) }; var s:字符串?测试
  • 感谢您的解释...所以使用相同的示例,Person 只接受“字符串?” ?我可以传递一个字符串吗?
  • 以 Person 为例,您可以同时传递:String?和字符串。
  • 好的,我的第一条评论不清楚。到类型类型的变量!您可以分配两个值:类型和可选。因此,您可以将 None 传递给 Type! 类型的参数,但这可能会导致崩溃 - 运算符“!”建议您不需要检查值是否存在(在这种情况下,您可能希望有类型类型的参数?)。
【解决方案2】:

请在“The Swift Programming Language”一书中查找“Implicitly Unwrapped Optional Type”。苹果公司
有解释,Type!到底是什么意思,还有默认值为nil。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多