Swift - 将plist文件读取到数组?

Mig*_*uel 9 arrays file nsarray nsbundle swift

我创建了一个从英语单词到西班牙语单词的迷你翻译.我想使用englishArray.plist而不是我的englishArray = ["猫"]我怎样才能创建这个?

在此输入图像描述

我还使用了localizable.strings来检索"el gato"的值"cat"但是我想从englishArray.plist中检索它

我从这开始,但不确定我是否在正确的道路上

let path = NSBundle.mainBundle().pathForResource("englishArray", ofType: "plist") 
let plistEnglishArray = NSArray(contentsOfFile: path!)
Run Code Online (Sandbox Code Playgroud)

这是我的其余代码:

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

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Khu*_*ong 8

然后将您的root 对象更改为Array

var myEnglishArray: [String] = []
if let URL = NSBundle.mainBundle().URLForResource("englishArray", withExtension: "plist") {
      if let englishFromPlist = NSArray(contentsOfURL: URL) as? [String] {
        myEnglishArray = englishFromPlist
      }
    }
Run Code Online (Sandbox Code Playgroud)


Pau*_*say 8

斯威夫特4

绝对最简单的方法是

    let url = Bundle.main.url(forResource: "Sounds", withExtension: "plist")!
    let soundsData = try! Data(contentsOf: url)
    let myPlist = try! PropertyListSerialization.propertyList(from: soundsData, options: [], format: nil)
Run Code Online (Sandbox Code Playgroud)

myPlist对象是数组或字典,无论您用作plist的基础。


Jac*_*ack 6

斯威夫特4

您可以使用纯Swift类型的Codable

首先从中加载Plist文件,bundle然后使用PropertyListDecoder

完整的代码-

    func setData() {
        // location of plist file
        if let settingsURL = Bundle.main.path(forResource: "JsonPlist", ofType: "plist") {

            do {
                var settings: MySettings?
                let data = try Data(contentsOf: URL(fileURLWithPath: settingsURL))
                    let decoder = PropertyListDecoder()
                settings = try decoder.decode(MySettings.self, from: data)
                print("array  is \(settings?.englishArray ?? [""])")//prints array  is ["Good morning", "Good afternoon"]


            } catch {
                print(error)
            }
        }
    }
}
struct MySettings: Codable {

    var englishArray: [String]?

    init(from decoder: Decoder) throws {
        let values = try decoder.container(keyedBy: CodingKeys.self)
        englishArray = try values.decodeIfPresent([String].self, forKey: .englishArray)

    }
}
Run Code Online (Sandbox Code Playgroud)