数组扩展,对成员的引用不明确 'subscript'
Array extension, Ambiguous reference to member 'subscript'
我正在尝试在 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
但是,如果我尝试 'get' 来自自身的值,我没有问题。例如:
import Foundation
extension Array {
mutating func zero() {
for i in 0..<self.count {
print(self[i])
}
}
}
没有错误,运行符合预期。
所以我的问题是;为什么我不能修改数组?
此外,正在替换:
self[i] = 0
与
self.append(0)
也会导致错误。 (无法使用“(Int)”类型的参数列表调用 'append')
所以它似乎根本不会让我修改自己。
如果您执行以下操作,它将起作用:
extension Array where Element: IntegerLiteralConvertible {
mutating func zero() {
for i in 0..<self.count {
self[i] = 0
}
}
}
您必须限制允许的元素类型,因为您不能,例如,将 String
的数组清零。
重要的是要记住,在扩展类似 Array
的内容时,您要考虑哪些类型的元素对您要添加的方法有效。如果它需要某种类型的元素,您对其进行约束,然后它就会起作用。这样你就只能在包含整数的 Array
上使用你的 zero()
方法。例如,您可以为 String
数组定义一个不同的版本,用字符串 "zero" 替换数组中的所有内容,并且该实现将仅用于您将其约束为的类型嗯。
我正在尝试在 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
但是,如果我尝试 'get' 来自自身的值,我没有问题。例如:
import Foundation
extension Array {
mutating func zero() {
for i in 0..<self.count {
print(self[i])
}
}
}
没有错误,运行符合预期。
所以我的问题是;为什么我不能修改数组?
此外,正在替换:
self[i] = 0
与
self.append(0)
也会导致错误。 (无法使用“(Int)”类型的参数列表调用 'append')
所以它似乎根本不会让我修改自己。
如果您执行以下操作,它将起作用:
extension Array where Element: IntegerLiteralConvertible {
mutating func zero() {
for i in 0..<self.count {
self[i] = 0
}
}
}
您必须限制允许的元素类型,因为您不能,例如,将 String
的数组清零。
重要的是要记住,在扩展类似 Array
的内容时,您要考虑哪些类型的元素对您要添加的方法有效。如果它需要某种类型的元素,您对其进行约束,然后它就会起作用。这样你就只能在包含整数的 Array
上使用你的 zero()
方法。例如,您可以为 String
数组定义一个不同的版本,用字符串 "zero" 替换数组中的所有内容,并且该实现将仅用于您将其约束为的类型嗯。