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:什么是强制类型修饰符(!)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)