我试图在Xcode的游乐场写一个Array扩展。我想编写一个函数来修改数组,以便在调用函数时填充0。我尝试使用的代码是:
import Foundation
extension Array {
mutating func zero() {
for i in 0..<self.count {
self[i] = 0 // ERROR - Ambiguous reference to member 'subscript'
}
}
}
由于以下错误:
,此代码无法运行self[i] = 0
然而,如果我试图“获得”&#39;来自自我的价值,我没有问题。例如:
import Foundation
extension Array {
mutating func zero() {
for i in 0..<self.count {
print(self[i])
}
}
}
没有错误并按预期运行。
所以我的问题是;为什么我无法修改数组?
另外,更换:
self[i] = 0
用,
self.append(0)
也会导致错误。 (不能使用类型&#39;(Int)&#39;)
的参数列表调用&#39;追加&#39;所以它似乎不让我修改自我。
答案 0 :(得分:4)
如果您执行以下操作,它将起作用:
extension Array where Element: IntegerLiteralConvertible {
mutating func zero() {
for i in 0..<self.count {
self[i] = 0
}
}
}
您必须限制所允许元素的类型,因为您不能将String
的数组清零。
重要的是要记住,在扩展类似Array
的内容时,您会考虑哪些类型的元素对您要添加的方法有效。如果它需要某种类型的元素,你就可以约束它,然后就可以了。这样,您只能在包含整数的zero()
上使用Array
方法。您可以为String
数组定义不同的版本,例如,使用字符串&#34; 0和#34;替换数组中的所有内容,并且该实现仅用于您约束的类型它也是如此。