クラスプロパティの宣言
クラスプロパティは宣言と同時に初期値を入れる。
入れない場合は「?」とか「!」を付ける。「?」はnilで初期化されます。
Swift
class Test { var num1:Int = 0 var num2:Int? }
デバッグ出力
NSLogがそのまま使えるけど、printlnのが直感的かも。
Swift
var hoge = "hoge" NSLog("hoge=%@", hoge) println("hoge= \(hoge)")
forが短く書ける
forが結構短く書けます。(Objecive-Cのようにも書ける)
これは1から10まで繰り返す。
Swift
for i:Int in 0...10 { println(i) }
普通のforだと「1<<10」みたいに指定数の直前まで繰り返すには「..<」ってする。
Swift
for i:Int in 0..<10 { println(i) }
配列のパースは今まで通り「for~in」
Swift
var values:[Int] = [5,9,80,4,6] for value:Int in values { println("\(value)") }
import
自分で作成したプロジェクト内のswiftクラスはimportの記述は必要ない。
Swift
import UIKit
型のキャスト(コンバージョン)
IntとFloatを足すときとか。
Swift
var int1:Int = 3; var float1:Float = 1.5; var hoge = Float(int1) + float1;
UILabel作成
allocとかinitWithFrameとか必要ない。
Objective-C
UILabel* testLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 30)]; testLabel.text = @"Test label"; [self.view addSubview:testLabel];
Swift
var testLabel:UILabel = UILabel(frame : CGRectMake(10, 200, 320, 30)) testLabel.text = "Test label" self.view.addSubview(testLabel)
UIViewとかのサブクラスの作成
required init の部分を追記しないといけないぽい。
Objective-C
// TestUIView.h @interface TestUIView : UIView // TestUIView.m @implementation TestUIView - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { } return self; }
Swift
class TestUIView UIView { required init(coder: NSCoder) { super.init(coder: coder) } override init(frame: CGRect) { super.init(frame: frame) } }
メソッドの定義と呼び出し
メソッドを定義するときはラベル名は省略できます。省略した場合は引数名がラベル名になります。
func hoge(num1:Int, num2:Int, num3:Int) -> Int { return num1 + num2 + num3 }
なので呼び出すときはこんな感じ。
hoge(10, num2:20, num3:30)
Objective-Cのブラケットだとそこまで気にならなかったのですが、さすがにこの形だと一つ目の引数だけラベルがないのはちょっと気持ち悪いですね。
定義時、先頭に「#」を付けてあげると
func hoge(#num1:Int, num2:Int, num3:Int) -> Int {
一つ目の引数にもラベルが書けるようになる。
hoge(num1:10, num2:20, num3:30)
とりあえず以上です。いろいろ間違ってるところがあると思いますがご了承ください。
Objective-Cはちょっと特殊で入りにくい感がありましたが、Swiftは最近のスクリプト言語っぽいのでとっつきはいいですね。
参考サイト
SwiftでObjCも利用したアプリ開発のときにハマったこと
のんびりSwift : 関数 #1 : 導入