Swift 斯威夫特:为什么这是不变的?
你能告诉我为什么这个代码不起作用吗 我有几个Swift 斯威夫特:为什么这是不变的?,swift,immutability,Swift,Immutability,你能告诉我为什么这个代码不起作用吗 我有几个[AnyObject]数组,其中包含UILabels和UITextForm。 此func应将数组作为参数,并禁用所有标签和文本表单。我试过使用map,但仍然有同样的问题,编译器告诉我,或者变量是常量,或者是不可变的 func disableSectionForm(formSection section: inout [AnyObject]) { for i in 0...section.count { if section[i]
[AnyObject]
数组,其中包含UILabels和UITextForm。
此func
应将数组作为参数,并禁用所有标签和文本表单。我试过使用map,但仍然有同样的问题,编译器告诉我,或者变量是常量,或者是不可变的
func disableSectionForm(formSection section: inout [AnyObject]) {
for i in 0...section.count {
if section[i] is UILabel || section[i] is UITextField {
section[i].isEnabled = false
}
}
}
尝试检查是否让阻止并使用选项
func disableSectionForm(formSection section: inout [AnyObject]) {
for i in 0...section.count {
if let label = section[i] as? UILabel {
label.isEnabled = false
}
if let textField = section[i] as? UITextFiled {
textField.isEnabled = false
}
}
}
尝试检查是否让阻止并使用选项
func disableSectionForm(formSection section: inout [AnyObject]) {
for i in 0...section.count {
if let label = section[i] as? UILabel {
label.isEnabled = false
}
if let textField = section[i] as? UITextFiled {
textField.isEnabled = false
}
}
}
这里有许多编译错误 问题1(这只是一个建议) 此处不需要
inout
,因为您不是在变异节
数组,而是在变异数组中的对象
问题2
inout
应位于参数名称之前(如果您使用的是Swift 2.2)
第3期
与dynamicType比较时,应使用self
问题4
您无法写入节[i]。isEnabled=false
,因为任何对象
都没有成员isEnabled
,所以您应该执行强制转换
第5期
您正在访问数组外部的索引,因此
0...section.count
应该是这样
0..<section.count
Swift 3.0(测试版6)
代码版本#3 让我们定义一个协议来表示启用了
属性的类
Swift 2.2
让我们遵守它UILabel
和uitextlab
extension UILabel: HasEnabledProperty { }
extension UITextField: HasEnabledProperty { }
最后
func disableSectionForm(formSection section: [AnyObject]) {
section.flatMap { $0 as? HasEnabledProperty }.forEach { $0.enabled = false }
}
Swift 3.0(测试版6)
这里有许多编译错误
问题1(这只是一个建议)
此处不需要inout
,因为您不是在变异节
数组,而是在变异数组中的对象
问题2
inout
应位于参数名称之前(如果您使用的是Swift 2.2)
第3期
与dynamicType比较时,应使用self
问题4
您无法写入节[i]。isEnabled=false
,因为任何对象
都没有成员isEnabled
,所以您应该执行强制转换
第5期
您正在访问数组外部的索引,因此
0...section.count
应该是这样
0..<section.count
Swift 3.0(测试版6)
代码版本#3
让我们定义一个协议来表示启用了属性的类
Swift 2.2
让我们遵守它UILabel
和uitextlab
extension UILabel: HasEnabledProperty { }
extension UITextField: HasEnabledProperty { }
最后
func disableSectionForm(formSection section: [AnyObject]) {
section.flatMap { $0 as? HasEnabledProperty }.forEach { $0.enabled = false }
}
Swift 3.0(测试版6)
非常感谢。我应该使用if-let还是dynamicType?@appzYourLife-issue#6任何对象都非常有用dead@appzYourLife不,我是说任何物体都是死的。现在一切都好了。使用AnyObject将导致代码中断,因为不再有任何自动桥接到AnyObject。因此,摆脱使用任何对象的习惯是个好主意。(当然,正如您所说,在任何情况下使用UIView都是一个好主意。)另外,dynamicType
现在是type(Of:)
。顺便说一句,现在任何东西都可以桥接到任何对象:。谢谢!我应该使用if-let还是dynamicType?@appzYourLife-issue#6任何对象都非常有用dead@appzYourLife不,我是说任何物体都是死的。现在一切都好了。使用AnyObject将导致代码中断,因为不再有任何自动桥接到AnyObject。因此,摆脱使用任何对象的习惯是个好主意。(当然,正如你所说,在任何情况下使用UIView都是一个好主意。)另外,dynamicType
现在是type(Of:)
。顺便说一句,现在任何东西都可以桥接到任何对象:.happy coding@AndreaMiottohappy coding@AndreaMiotto