[iOS 10] Android開発者のためのSwift入門(Swift 3.0対応)

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

Androidのアプリをメインで開発していますが、最近iOSも勉強し始めました。
Kotlinでいろいろ遊んでいて、Swiftも似ているっという話も聞くので、iOSも比較早く習得できるかもしれないと思ったからです。

何番煎じかわかりませんか、KoltinとSwiftを比較してみようと思います。
詳細な比較は、いろんな記事があります。

しかし、0から学ぶ場合、詳細よりも最初は全体を眺めたい!
全体を理解すれば、他の方々の記事も理解しやすいと思います!
どこから手を付けるのか。。。
日本語も名詞だけつなげれば、なんとなく意味がとれる!
クラス機能がわかれば、なんとなくソースコードは追えるはずっということで、
まずクラスの機能 (プロパティ、メソッド、イニシャライザ、デフォルト アクセス修飾子) を眺めます。

Android開発者であればKotlinはできる!
はいいすぎなので、補足で等価のJavaコードを書きます。

Kotlin

/* 
 * デフォルトはpublic final 継承を許す時は、openをつける
 * コンストラクタの引数を定義することができる。
 * これでだけthis.x = x,this.y = yをしている。
 */
class Hoge(val x: String, private val y: String = "default") {
    //型推論があるため、Stringを省略できる
    //文末;はいらない
    var string = "string"

    //valの場合は、finalで、上書きはできない
    val finalString = "final string"

    //nullになる場合は、?をつける
    var undefined: String? = null

    //もちろんprivateなども設定できる
    private val privateString = "private string"

    //Javaのstaticと同じだが、定義が少し特殊companion objectを使う
    companion object {
        val staticFinalString = "static final string"

        fun f(string: String) {
            print(string)
        }

        private fun g(string: String, string2: String) {
            print(string)
            print(string2)
        }

    }

    //コンストラクタ。 xとyはクラスを定義するときに宣言している
    init {
        print(x)
        print(y)
    }

    //メソッド:デフォルトはpublic
    fun hoge(string: String) {
        print(string)
    }

    //もちろんprivateなどをつけることができる
    private fun foo(string: String, string2: String) {
        print(string)
        print(string2)
    }

    //式一個の場合は、{} と returnを省略可能
    fun sum(x: Int, y: Int) = x + y

}

//使用例
//インスタンス化。newはいらない
val hoge = Hoge("x")

//メソッドの実行
print(hoge.sum(1 ,2))

//staticメソッドの実行
Hoge.f("static method")

Swift

/*
 * コメントの書き方も同じ
 * デフォルトは継承可能
 * intanalがデフォルト
 */
public final class Hoge {
    // 文末;はいらない
    // Kotlinのvarと同じ
    var string = "string"

    // Kotlinのvalと同じ Javaのfinal
    let finalString = "final string"

    // Kotlinと同じくnullの可能性があるときは「?」をつける
    var undefined: String?

    // staticの付け方はJavaっぽいです
    let staticFinalString = "static final string"

    //funからfuncに、retrunの型の指定が : から -> になってますね
    static func f(string: String) -> Void {
        print(string)
    }

    //デフォルトはpublic
    private static func g(string: String, string2: String) {
        print(string)
        print(string2)
    }

    let x: String
    private var y: String

    //イニシャライザはJavaでいうところのコンストラクタと同じ役割です。
    //デフォルトもつけれます。
    init(x: String, y: String = "default") {
        self.x = x
        self.y = y
        print(x)
        print(y)
    }

    //Kotlinと同様Voidも省略可能
    func hoge(string: String)  {
        print(string)
    }

    private func foo(string: String, string2: String) {
        print(string)
        print(string2)
    }

    //一行であっても、{}と型を省略できない
    func sum(x: Int, y: Int) -> Int {
        return x + y
    }
}

//使用例

//インスタンス化:newはいらない
//yはデフォルトを設定してるため省略可能
let hoge = Hoge(x: "x", y: "y")

//メソッドの呼び出し、xとyはデフォルトでは省略できない
print(hoge.sum(x: 1, y: 2))

//staticメソッドの呼び出し
print(Hoge.f(string: "static method"))

Javaでの等価コード

public class Hoge {
    public static String staticString = "static string";
    public static final String staticFinalString = "static final string";
    public String string = "string";
    public final String finalString = "final string";
    public String undefined = null;

    public final String x;
    private String y;

    public static void f(String string) {
        System.out.print(string);
    }

    private static void g(String string1, String string2) {
        System.out.print(string1);
        System.out.print(string2);
    }

    public Hoge(String x, String y) {
        this.x = x;
        this.y = y;
        System.out.print(x);
        System.out.print(y);
    }

    public Hoge(String x) {
        this(x, "default");
    }

    public void hoge(String string) {
        System.out.print(string);
    }

    public void foo(String string1, String string2) {
        System.out.print(string1);
        System.out.print(string2);
    }

    public int sum(int x, int y) {
        return x + y;
    }
}

final Hoge hoge = new Hoge("x", "y");
System.out.print(hoge.sum(1, 2));
System.out.print(Hoge.f("static method"));

まとめ

KotlinとSwiftはなんとなく似てますが、文法の差は少しある。しかし、Android StudioやXcodeでエラーやヒントがあるので、なんとかなりそう。
AndroidエンジニアがiOS勉強する場合、Java -> Kotlin -> Swift の順に学ぶと学習コストが低そう。

Kotlinを学ぶ環境がすごい揃っているので、比較的簡単に学べると思います。

  • Try Kotlinですぐに試せる環境と、練習問題(テストコード付)が公式で用意されている
  • Android Studioの強力なサポート

ぜひAndroidではKotlinを、iOSではSwiftで快適な開発ライフを楽しみましょう。

参考URL