我有一根绳子var oneString: String!
然后在一个方法中,当我想将一个字符串连接到oneString
我必须这样做:
oneString! += anyString
如果我不添加!
我收到一个错误'String!' is not identical to 'CGFloat'
如果我用以下方式初始化我的字符串var oneString = ""
我没有这个问题。为什么?为什么我需要拆开包装oneString
而我在声明时明确表示它不会为零?
为什么我需要拆开包装oneString
而我在声明时明确表示它不会为零?
你误解了什么var oneString: String!
方法。这并不意味着oneString
不会为零。如果您将类型声明为var oneString: String
, then您正在声明一个不能为零的类型。
方式String!
是一个“隐式展开的可选”。也就是说,它是可选的,就像String?
,但是假装是非可选的有时。主要是为了阅读它——你不必显式地打开它来获取值。缺点是,如果它永远为零(而且完全可以如此),您的代码将陷入困境并中止。
但这种假装不可选择的做法也只能到此为止。你不能通过String!
到一个函数inout
当该参数不是可选的时。因此你的问题。
安东的答案对于它不起作用的原因是完全正确的,他建议的运算符重载将使您的代码编译。但这不是正确的解决方案 - 您应该避免使用隐式展开的选项,因为它们是弹簧加载的死亡陷阱,并且仅在特定情况下使用(最常见的是 Cocoa UI 控件)。 1,000 次中有 999 次你选择常规可选或非可选会更好
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)