我有一个字符串var oneString: String!,后来在一个方法中,当我想连接一个字符串,oneString我必须这样做:
oneString! += anyString
Run Code Online (Sandbox Code Playgroud)
如果我不添加,!我会收到错误'String!' is not identical to 'CGFloat'
如果我初始化我的字符串var oneString = ""我没有这个问题.为什么?为什么我需要打开,oneString而我明确表示在我宣布它时它不会是零?
为什么我需要打开,
oneString而我明确表示在我宣布它时它不会是零?
你误解了什么var oneString: String!意思.这并不意味着oneString不会是零.如果将类型声明为var oneString: String,则表示不能为nil的类型.
该类型String!是"隐式解包的可选".也就是说,它是一个可选的,很像String?,但有时候假装是非可选的.主要是为了阅读它 - 你不必明确地解开它来获得价值.缺点是,如果它永远是零(并且它完全可以),您的代码将陷阱并中止.
但这种假装不可选只是到目前为止.您不能将该参数传递String!给函数,inout因为该参数不是可选的.因此你的问题.
Anton的答案是完全正确的,为什么它不起作用,他建议的运算符重载将使你的代码编译.但它不是正确的解决方案 - 您应该避免使用隐式解包的选项,因为它们是弹簧加载的死亡陷阱,并且仅在特定情况下使用(最常见的是使用Cocoa UI控件).1000个中的999次,使用常规可选或非选购会更好
| 归档时间: |
|
| 查看次数: |
389 次 |
| 最近记录: |