LoginSignup
4
6

More than 5 years have passed since last update.

Swift3.0からSwift4.0で何が変わった?

Posted at

Swiftの新バージョン、Swift4.1が2018年03月29日にリリースされましたね。

これまでSwift3.0の学習をしていたのですが、Swift4系になることでどのように変わったのか自分なりに調べましたので纏めたいと思います。
(新しいもの好きなもので・・・)
今回は中でも気になったものを抽出してご紹介いたします。

整数値の比較

Swift3.0までは整数同士を比較する場合でも、型が違えばエラーとなっていました。

それがSwift4.0では型規制が緩くなり、整数同士の比較であればエラーにならず比較演算が行われるようになりました。

var i: Int    = 10
var i32: Int  = 10
var ui: Int   = 10
var ui32: Int = 10

// Swift3.0ではIntとInt32の比較になるため、エラーで実行できない
if i == i32 {
    print("OK")
}

 // Swift3.0ではUIntとUInt32の比較になるため、エラーで実行できない
if ui == ui32 {
    print("OK")
}

ただし、これはあくまで比較する場合のみだそうで、計算時には型をそろえる必要があるようです。

JSONが扱いやすくなった

Swift3.0ではライブラリを導入するか、Apple標準フレームワークのJSONSerializationを使用して解析する方法しかありませんでした。

実際私もAPIとの連携にJSONを使用しているのですが、記述量が多く厄介な印象を持っていました。w

それがSwift4.0ではCodableというプロトコルが新しく追加され、そのプロトコルを用いることで以前よりJSONの解析が簡単になりました。

{
    "name": "hoge",
    "type": "fuga",
    "age": 22,
    "birthday": "1995/01/01"
}

このようなJSONを解析したいとします。

そのために、受け口となる構造体をCodableを用いて作成します。

User.swift

// CodableプロトコルがFoundationに内包されているためImport
import Foundation

// Codableプロトコルを使用して構造体を定義
struct User: Codable {

    let name: String
    let type: String
    let age: Int
    let birthday: String

}

次にJSONの解析ですが、以下の処理で完了です。


var json = XXXXX
var user = try! JSONDecoder().decode(User.self, from: json.data(using: .utf8)!)

これでもうあとは使い放題です(?)


print(user.name)
print(user.type)
print(user.age)
print(user.birthday)

あと実際に試せていませんが、JSONがネストしている場合にも対応しているため、今まで通り使えそうな印象ですね!

私もSwift4.xを使ったアプリを作成するときに率先して使ってみようと思います。

で、4.0→4.1の変化は?

Swift4.0でのソース互換性が改善されたり、コアな部分の品質改善が行われているようです。

ほとんど開発者が意識するような変更はないのかなと思いますが、
一部Map系のメソッドが非推奨やリネームされたりしているようですので、
注意すべきはそのあたりかなと思います。

さいごに

今の時代、OSにしろ言語にしろ、アップデートが頻繁に行われますね。
頑張って覚えたことがもうすでに古い情報だったりするので、都度アンテナを張って最新の情報を取り寄せていきたいと思います。
一新しい物好きとして!!!!

ではでは。

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6