2016-03-25 9 views
2

2D配列を扱えるように、配列型に拡張をしようとしています。実際、Objective-Cでこれを行い、以下のコードは魅力的に機能しました。しかし、私は本当にスウィフトにこだわりました。Swift 2D Array Extension Error

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 
} 

}

私は関係なく、私は何をすべきかのサンプルコードで言及しないエラーが発生します。私はどんな助けにも感謝しています。ありがとう。ローマSausarnesへ

UPDATEのおかげ

正しいコードは以下です:あなたは配列要素の型が延長にあるもの言う必要が

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 
} 

}

答えて

5

から

extension _ArrayType where Generator.Element == AnyObject { 
    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 
    } 
} 

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])' 
     } 

     var subArray = self[idx] 
     subArray.append(anObject) 
    } 

    func objectAtIndexPath(indexPath: NSIndexPath) -> AnyObject { 
     let subArray = self[indexPath.indexAtPosition(0)] 
     return subArray[indexPath.indexAtPosition(1)] as Element.Generator.Element 
    } 
} 
これを試してみてください
+0

あなたは素晴らしいです!それは働いたが、私は実際にその_ArrayTypeとGeneratorのすべてを取得していませんでした。私は推測することがたくさんあります:) –

+0

実際、addObjectメソッドの最後の2行にはエラーがあります。 addObjectメソッドの最後の行は次のようになります:\t \t self [idx] .append(anObject) –

+0

私はSwift 3で助けが必要だと思っています:) –

0

。近いですが、私が正しくあなたの質問を理解していれば、それはそれは次のようになります意味[AnyObject]の配列で、ブリムストーンの答え@this question