Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
8
Help us understand the problem. What is going on with this article?
@n_amari

SwiftでplistをCodableで読み込む

More than 1 year has passed since last update.

SwiftでplistをCodableで読み込む

昨日の記事Swiftでplistを読み込むに「NSDictionary使いたくない」って書いたら心優しいmasakihoriさんが Whisper words of wisdom 「Codeableで書けばええ」をくださった、、、ので早速トライした。

実行環境は前回と同じ(2018年6月20日現在 xcode 9.4.1, swift 4, ios 11.4)

結論

Codable のほうが絶対いいよね。かっこいいし。

コード

Codable protocolをもつApiURL構造体をつくりました。
classでも使えるんか?って思って試しましたが使えません。
いや、正確には使えるかもしれませんがおそらく使い物になりません。

ApiCodable.swift
struct ApiURL: Codable {
    let BaseURL: String
    let Paths: ApiPaths
}

struct ApiPaths: Codable {
    let user: Dictionary<String, String>
    let staff: Dictionary<String, String>
}

そして以下のコードで plist をデコードします。propは構造体なので.(ドットシンタックス)でメンバにアクセスできます。 
すごく便利です。

AppDeligate.swiftとか
var prop: ApiURL?
if let urls = Bundle.main.path(forResource: "ApiURL", ofType:"plist" ) {
  do {
    let data  = try Data(contentsOf: URL(fileURLWithPath: urls))
    self.prop = try PropertyListDecoder().decode(ApiURL.self, from: data)
  } catch let e {
    print("Failed to getting properties from plist.")
    print("Reason: \(e)")
  }
}
prop?.BaseURL // -> "https://api.example.com"

一言メモ

Codableはswift4で追加されましたが、かなりの発明品だと思う。

8
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
n_amari
仕事でもプライベートでもやった技術的な内容をつらつらと書いていこうと思います。
ehealthcare
日本最大級の医療機関検索サイト「病院なび」、寄せられた相談と医師の回答を無料で公開の「医療QAなび」などを自社開発しています。 また、弊社ではWeb開発エンジニアを募集しています(リモート勤務可)。 https://green-japan.com/company/3985 「病院なび」開発チーム Twitter https://twitter.com/byoinnavi_dev

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
8
Help us understand the problem. What is going on with this article?