ios – swift:什么是强制类型修饰符(!)

ios – swift:什么是强制类型修饰符(!),第1张

概述迅速的文档解释了目的!拆箱运算符可选类型, var optionalString : String? = "optional"var regularString: String = optionalString! 但是它们已经在类型定义本身(String!)上使用它,而没有我可以找到的明确解释. 例: func takesBang(value:String!) -> String { i 迅速的文档解释了目的!拆箱运算符可选类型,

var optionalString : String? = "optional"var regularstring: String = optionalString!

但是它们已经在类型定义本身(String!)上使用它,而没有我可以找到的明确解释.

例:

func takesBang(value:String!) -> String {    if !value {        return "nil value,without the safe Syntax"    }    return "This works"}var unsafe:String!takesBang(unsafe) // yIElds "nil value,without the safe Syntax"

字符串!类型不强制可选类型的取消装箱,但只是似乎消除了对可选语法(?)的需要. Apple在自己的例子中使用这个,但似乎只是否定了可选的安全(指针)机制.

任何人可以解释目的/动机吗?这似乎通常不安全,因为呼叫者将不必检查或至少考虑其价值.

解决方法 语言参考文献中指出,同样!,当在var声明上使用时,只是语法糖(意味着它们在解析期间被编译器替换).它们映射到可选< T> (?)和ImplicitlyUnwrappedOptional< T> (!) 分别.

虽然你必须使用如果let maybeNil = someVar? {…}类型为可选< T>的变量的语法,您不需要使用隐式解包的可选项(如名称已经暗示).由于https://stackoverflow.com/a/24071003/1599345已经提到的海报,隐式解开的可选项旨在与传统的Objective-C API一起使用,因为这些API并不能为Swift提供足够的信息.

所以作为一个简短的回顾:

var foo : SomeType? // should be read as var foo : Optional<SomeType>var bar : SomeType! // should be read as var bar : ImplicitlyUnwrappedOptional<SomeType>

的用法?和!当使用变量中的实际值实际上是可以以这种方式读取的映射,类似于上面的声明:

foo?.somemethod() // if let maybeFoo = foo { maybeFoo.somemethod() }foo!.somemethod() /* # Yeah I kNow for sure,that this is NOT nil ever ever… just call `somemethod` and kill me at runtime if it doesn't work out.
总结

以上是内存溢出为你收集整理的ios – swift:什么是强制类型修饰符(!)全部内容,希望文章能够帮你解决ios – swift:什么是强制类型修饰符(!)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1030523.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存