我正在尝试在 Xcode 的 playground 中编写 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
但是,如果我尝试从 self 中“获取”一个值,我没有任何问题。例如:
import Foundation
extension Array {
mutating func zero() {
for i in 0..<self.count {
print(self[i])
}
}
}
没有错误并按预期运行。
所以我的问题是;为什么我不能修改数组?
此外,替换:
self[i] = 0
与,
self.append(0)
也会导致错误。 (不能使用类型为“(Int)”的参数列表调用“追加”)
所以它似乎根本不允许我修改 self。
最佳答案
如果您执行以下操作,它将起作用:
extension Array where Element: IntegerLiteralConvertible {
mutating func zero() {
for i in 0..<self.count {
self[i] = 0
}
}
}
您必须限制允许的元素类型,因为您不能,例如,将 String
的数组归零。
重要的是要记住,在扩展类似Array
的东西时,您要考虑哪些类型的元素对您要添加的方法有效。如果它需要某种类型的元素,您对其进行约束,然后它就会起作用。这样你就只能在包含整数的 Array
上使用你的 zero()
方法。例如,您可以为 String
数组定义一个不同的版本,用字符串“零”替换数组中的所有内容,并且该实现将仅用于您将其约束到的类型
关于arrays - 数组扩展,对成员 'subscript' 的引用不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36453813/