[iOS 10] Android開発者のためのSwift入門(Swift 3.0対応)
はじめに
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で快適な開発ライフを楽しみましょう。