WEBOPIXEL

乱雑Swiftメモ

Posted: 2014.09.29 / Category: iOS / Tag: 

iPhone6が出ましたね!それにともないXcode6の正式版もリリースされました。
今までのバージョンとの大きな違いはAppleの新言語Swiftをサポートしてることではないでしょうか。ってことでちょっとSwiftさわってみました。まとまりがなくちょっと乱雑になってます。

Sponsored Link

クラスプロパティの宣言

クラスプロパティは宣言と同時に初期値を入れる。
入れない場合は「?」とか「!」を付ける。「?」は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 : 導入