2016-04-13 4 views
4

Ich habe schnelle Array von Tupeln [(String, String)] und möchte dieses Array zu NSMutableArray zu werfen. Ich habe dies versucht und es funktioniert nicht:Wie man eine schnelle Reihe von Tupeln zu NSMutableArray wirft?

let myNSMUtableArray = swiftArrayOfTuples as! AnyObject as! NSMutableArray 
+1

Sie nicht können. Ändere das Tupel für ein 2D-Array '[[String]]' und speichere es als '[AnyObject]' –

Antwort

7

Da rasche Typen wie Tuple oder Struct haben keine Entsprechung in Objective-C können sie nicht gegossen werden oder auf die verwiesen als AnyObject welche NSArray und NSMutableArray ihre Elementtypen einschränken.

Die zweitbeste Lösung ist, wenn Sie ein NSMutableArray von einem schnellen Array von Tupeln zurückgeben muss ein Array von 2 Element Arrays könnten zurückkommen:

let itemsTuple = [("Pheonix Down", "Potion"), ("Elixer", "Turbo Ether")] 
let itemsArray = itemsTuple.map { [$0.0, $0.1] } 
let mutableItems = NSMutableArray(array: itemsArray) 
2

Es gibt zwei Probleme mit dem, was Sie zu tun versuchen:

  • Swift-Array kann auf NSArray gegossen werden, aber es kann nicht zu NSMutableArray gegossen werden Ohne eine Kopie zu erstellen
  • Swift-Tupel haben kein Cocoa-Pendant, daher können Sie sie oder Swift-Collections, die sie enthalten, nicht in Cocoa-Typen umwandeln.

Hier ist, wie Sie NSMutableArray von einem Swift Reihe von String Objekte konstruieren:

var arr = ["a"] 
arr.append("b") 
let mutable = (arr as AnyObject as! NSArray).mutableCopy() 
mutable.addObject("c") 
print(mutable)