2016-04-23 19 views
3

Ich habe eine Mini-Übersetzung von englischen Wörtern zu spanischen Wörtern erstellt. Ich möchte die EnglischArray.plist anstelle meiner EnglischArray verwenden = ["Die Katze"] Wie kann ich das schaffen?Swift - PLIST-Datei zu einem Array lesen?

enter image description here

Ich habe auch ein localizable.strings den Wert „die Katze“ für „El Gato“ zurückzuholen, aber ich würde das gerne von englishArray.plist

ich damit begann abrufen aber nicht sicher, ob ich auf dem richtigen Weg bin

let path = NSBundle.mainBundle().pathForResource("englishArray", ofType: "plist") 
let plistEnglishArray = NSArray(contentsOfFile: path!) 

Hier ist der Rest meines Code:

var englishArray: [String] = ["rainbow", "boots", "heart", "leaf", "umbrella", "tired", "angry", "cry", "the cat" ] 


override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    self.translateTextField.delegate = self 
    picker.delegate = self 
    picker.dataSource = self 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

@IBAction func translateButtonTapped(sender: UIButton) { 

    let emptyString = self.translateTextField.text 

    if (emptyString!.isEmpty) { 

     print("please enter a word") 

    } 

    for transIndex in englishArray.indices { 
     if englishArray[transIndex] == emptyString!.lowercaseString { 

      //englishArray 

      //translateLabel.text = "\(spanishArray[transIndex])" 
      translateLabel.text = NSLocalizedString(emptyString!.lowercaseString, comment:"") 


      print(emptyString) 
      return 

     } 
    } 
} 
+0

Ihr Root-Objekt ist ein Wörterbuch. Sie haben zwei Möglichkeiten: Importieren Sie das Wörterbuch oder reparieren Sie Ihre PLIST-Datei –

Antwort

5

Ihr root Objekt Array ändern, dann

var myEnglishArray: [String] = [] 
if let URL = NSBundle.mainBundle().URLForResource("englishArray", withExtension: "plist") { 
     if let englishFromPlist = NSArray(contentsOfURL: URL) as? [String] { 
     for myEnglish in englishFromPlist { 
      myEnglishArray.append(myEnglish) 
     } 
     } 
    } 
+0

Warum werfen Sie nicht einfach Ihre NSArray mit konditionalen Cast 'wenn lassen Sie EnglischArray = NSArray (contentsOfURL: url) als? [String] {' –

+0

Danke Leo. Bearbeitet. – Khuong

+1

Sie brauchen kein extra Array und/oder hängen 'if url = NSBundle.mainBundle() an. URLForResource (" englishArray ", mitExtension:" plist "), englischArray = NSArray (contentsOfURL: url) as? [String] { für Wort in EnglischArray { Drucken (Wort) } } ' –

1

Dies wird eine Ressource in Ihrem Bundle mit dem Namen "englishArray.plist" und speichert sie in der unveränderlichen Variable english lesen. Es wird optional sein, dass Sie vor der Verwendung testen sollten.

Es verwendet eine Schließung, um die Datei zu lesen und das Array zurückzugeben, damit Sie einen unveränderlichen Wert anstelle einer änderbaren Variable verwenden können, die geändert werden kann. Es ist eine gute Idee, immutables zu verwenden, wo immer Sie können - sie fördern die Stabilität.

import Foundation 

let english:[String]? = { 
    guard let URL = NSBundle 
    .mainBundle() 
    .URLForResource("englishArray", withExtension: "plist") else { 
     return nil 
    } 
    return NSArray(contentsOfURL: URL) as? [String] 
}() 
1

Hier ist die Lösung für eine rasche 3. Für diese Lösung müssen Sie in Ihrem plist Struktur nicht Typen ändern (halten Wörterbuch, Array, wie). Beachten Sie auch, dass der Name Ihres Arrays in plist auch englischArray ist, sodass das Argument (value for key) in der zweiten if -Anweisung auch englischArray ist.

var myEnglishArray: [String] = [] 
    if let URL = Bundle.main.url(forResource: "englishArray", withExtension: "plist") { 
     guard let englishFromPlist = NSDictionary(contentsOf: URL) else { return [] } 
     if let englishArray = englishFromPlist.value(forKey: "englishArray") as? [String] { 
     for myEnglish in englishArray { 
      myEnglishArray.append(myEnglish) 
     } 
     } 
    }