扩展数组的数组 - Swift 4.1
Extending Arrays of Arrays - Swift 4.1
扩展数组的数组
Swift4.1,Xcode9.3
如何在 Swift 中扩展 Array<Array>
?
extension Array where Element == Array { //This is where the error occurs
someMethod()
}
此外,我将如何扩展特定类型的数组,例如:
extension Array where Element == Array<Int> { //Can I even do this?
someOtherMethod()
}
在此先感谢您的帮助!
我用过
extension Array where Element: RandomAccessCollection, Element.Index == Int {
}
例如通过 IndexPath
添加自定义下标
您可以通过任一方式扩展
extension Array where Element == Int {
func someIntegers() {
}
}
extension Array where Element == Array<String> {
func someStrings() {
}
}
然后在任何地方都这样调用,
[0, 1, 2].someIntegers()
[["hi"]].someStrings()
对于想要比目前的答案更普遍地执行此操作的人来说,这是一个开始。
扩展 Array<Array>
:
protocol ExpressibleAsDouble { // for illustration
func asDouble() -> Double
}
extension Array where Element: Sequence, Element.Element: ExpressibleAsDouble {
func asDoubles() -> [[Double]] {
return self.map { row in
row.map { scalar in
scalar.asDouble()
}
}
}
}
//-------------------------------------------
//example usage
extension Int: ExpressibleAsDouble {
func asDouble() -> Double {
return Double(self)
}
}
let ints: [[Int]] = [[1, 2], [3, 4]]
print(ints.asDoubles())
// prints: [[1.0, 2.0], [3.0, 4.0]]
这实际上是对 Array<any sequence, Array being one possible option>
的扩展,如果您想一般地引用嵌套标量,我不确定是否可以将其限制为 Array<Array>
。
Element
指的是 Array
的第一个维度(这是另一个数组),Element.Element
指的是嵌套维度的类型(如果我们重新谈论二维数组)。
扩展数组的数组
Swift4.1,Xcode9.3
如何在 Swift 中扩展 Array<Array>
?
extension Array where Element == Array { //This is where the error occurs
someMethod()
}
此外,我将如何扩展特定类型的数组,例如:
extension Array where Element == Array<Int> { //Can I even do this?
someOtherMethod()
}
在此先感谢您的帮助!
我用过
extension Array where Element: RandomAccessCollection, Element.Index == Int {
}
例如通过 IndexPath
您可以通过任一方式扩展
extension Array where Element == Int {
func someIntegers() {
}
}
extension Array where Element == Array<String> {
func someStrings() {
}
}
然后在任何地方都这样调用,
[0, 1, 2].someIntegers()
[["hi"]].someStrings()
对于想要比目前的答案更普遍地执行此操作的人来说,这是一个开始。
扩展 Array<Array>
:
protocol ExpressibleAsDouble { // for illustration
func asDouble() -> Double
}
extension Array where Element: Sequence, Element.Element: ExpressibleAsDouble {
func asDoubles() -> [[Double]] {
return self.map { row in
row.map { scalar in
scalar.asDouble()
}
}
}
}
//-------------------------------------------
//example usage
extension Int: ExpressibleAsDouble {
func asDouble() -> Double {
return Double(self)
}
}
let ints: [[Int]] = [[1, 2], [3, 4]]
print(ints.asDoubles())
// prints: [[1.0, 2.0], [3.0, 4.0]]
这实际上是对 Array<any sequence, Array being one possible option>
的扩展,如果您想一般地引用嵌套标量,我不确定是否可以将其限制为 Array<Array>
。
Element
指的是 Array
的第一个维度(这是另一个数组),Element.Element
指的是嵌套维度的类型(如果我们重新谈论二维数组)。