Я пытаюсь создать расширение для типа массива, чтобы иметь возможность работать с 2D-массивами. Фактически, я сделал это в Objective-C, а код ниже работал как шарм. Но я действительно застрял в Свифте.Быстрая ошибка расширения двумерного массива
extension Array {
mutating func addObject(anObject : AnyObject, toSubarrayAtIndex idx : Int) {
while self.count <= idx {
let newSubArray = [AnyObject]()
self.append(newSubArray)
}
var subArray = self[idx] as! [AnyObject]
subArray.append(anObject)
}
func objectAtIndexPath(indexPath : NSIndexPath) -> AnyObject {
let subArray = self[indexPath.section] as! Array
return subArray[indexPath.row] as! AnyObject
}
}
я получаю ошибку я не упоминалось в образце кода независимо от того, что я делаю. Буду признателен за любую помощь. Благодарю.
UPDATE благодаря римским Sausarnes
Правильный код это:
extension Array where Element: _ArrayType, Element.Generator.Element: AnyObject {
mutating func addObject(anObject : Element.Generator.Element, toSubarrayAtIndex idx : Int) {
while self.count <= idx {
let newSubArray = Element()
self.append(newSubArray) // ERROR: Cannot invoke 'append' with an argument list of type '([AnyObject])'
}
self[idx].append(anObject)
}
func objectAtIndexPath(indexPath: NSIndexPath) -> AnyObject {
let subArray = self[indexPath.indexAtPosition(0)]
return subArray[indexPath.indexAtPosition(1)] as Element.Generator.Element
}
}
Ты блестящий! Это сработало, но я действительно не получил все это _ArrayType и Generator. У меня есть много для чтения, я думаю :) –
На самом деле, есть ошибка, которую я сделал в последних двух строках метода addObject. Последняя строка метода addObject должна выглядеть примерно так: \t \t self [idx] .append (anObject) –
Мне кажется, мне нужна помощь с Swift 3 :) –