コンストラクタ

initでコンストラクタを宣言する。

class MyClass {
    var text: String

    // 引数なし
    init() {
        text = ""
    }

    // 引数あり
    init(text: String) {
        self.text = text
    }

以下のようにコンストラクタを通じてオブジェクトを生成します。

var obj1 = MyClass()
var obj2 = MyClass(text: "Text")

インスタンスメソッド

宣言は以下のようにします。

class MyClass {
    // 〜〜 プロパティ定義など 〜〜

    // 引数、戻り値なし
    func method1() {
        // Do something
    }

    // 引数なし、戻り値String
    func method2() -> String {
        return "method2"
    }

    // 引数String、戻り値なし
    func method3(name: String) {
        // Do something
    }

    // 引数String、Int、戻り値Bool
    func method4(name: String, age: Int) -> Bool {
        // Do something
        return true
    }

呼び出しは以下のようにします。

method1()
var str = method2()
method3("Name")
// 第一引数はname:というラベルは必要ないことに注意
var str2 = method4("Text", detail: "Detail")

もし第2引数以降もラベルなしにしたければ、ラベルの前に空白を入れて_(アンダースコア)をつけます。

func method5(text: String, _ detail: String) -> String {
   // Do Something.
}

// このように呼び出せる
method5("Text", "Detail")

ただし、これはおすすめしません。ラベルがあったほうが何のための引数かわかりやすいからです。多くの言語はこのようなラベルを持ちませんが、自分はSwiftやObjective-Cのようにあったほうが良いと思っています。

ちなみにこのような書き方もできます。withDetail detail:の部分に注目。

func method6(text: String, withDetail detail: String) -> String {
    return text + " " + detail
}

// この場合はこのように呼ぶ
method6("Text", withDetail: "Detail")

呼び出しのラベルはwithDetailで、メソッド内で使う変数名はdetailとなっています。呼び出し側でわかりやすいラベルをつけ、メソッド内ではシンプルな変数名で扱うといったことができます。

第一引数も名前ありにしたい時は、#をつけます。

func method6(#text: String, withDetail detail: String) -> String {
    return text + " " + detail
}

// この場合はこのように呼ぶ
method6(text: "Text", withDetail: "Detail")

クラスメソッド

クラスメソッドの宣言は、funcの前にclassとつけるだけです。

class func class_method1(name: String, inArray: [String]) -> Int? {
    return find(inArray, name)
}

呼び出し。

MyClass.class_method1("name", inArray: array1)

同じクラスのインスタンスメソッドからクラスメソッドを呼びたい場合はdynamicTypeを使うと良いでしょう。クラス名が変わった時も影響がありません。

// class_method1がMyClassのクラスメソッドであるなら、dynamicTypeはMyClassを指す
self.dynamicType.class_method1("name", inArray: array1)