MasKのpermission denied.

新卒2年目WEBエンジニアの僕がぶつかった技術的な問題や発見のメモ

PHPエンジニアの僕がswift勉強し始めてメモった点まとめ【後編】

以前(5/29)にmask.hatenadiary.com

を書いて以来ほとんど進んでいなかったswiftの勉強(テキスト)がやっと終わったので後編を作成しました。
それにしても3ヶ月以上前なのか...笑


・エラークラス NSErrorPointer

ポインタを保存する型なので変数のアドレスを渡す。アドレスの渡し方は &{変数名}

・ファイルパス

“~/dev/"

“~/dev/“.stringByExpandingTildePath

“/Users/taro/dev/“に展開してくれる。(面倒くさい)

・テキストファイルを読み込むイニシャライザ

テキストファイルを読み込むにはStringクラスのイニシャライザを使用しなければならない。

convenience init?(contentsOfFile path: String, encoding enc: UInt, error error: NSErrorPointer)

initの後ろの? はフェイラブルイニシャライザで、初期化に失敗する可能性があるイニシャライザであることを表している。
初期化に失敗した場合はnilになる。

・配列
var myArray = [“a”, “b”, “c”]
var numbers = [Int]() //空配列
・任意の型の要素を格納する
var anyArray: [AnyObject] = [1, “One”, “Two”]
var anyArray = [1, “One”, “Two”] でも可能
PHPのforeachはfor ~ in ~
for day in weekdays {
     println(day)
}

indexも使いたい場合

for (index, day) in emirate(weekdays) {
     println(index)
     println(day)
}
・ミュータブルな配列とイミュータブルな配列

初期化後にオブジェクトについて、変更可能なことをミュータブル、変更不可能なことをイミュータブルという。
var で宣言したらミュータブル、letで宣言したらイミュータブル

・範囲を指定して置き換える
var colors = [“red”, “green”, “orange”, “pink”, “black”]
colors[13] = [“blue”, “gold”, “yellow”]
//  [“red”, “blue”, “gold”, “yellow”, “black”]
・置き換える要素が範囲より多い場合、残りの要素が挿入される
var colors = [“red”, “green”, “orange”, “pink”, “black”]
colors[12] = [“blue”, “gold”, “yellow”]
//  [“red”, “blue”, “gold”, “yellow”, “pink”, “black”]
・代入する要素がレンジより少ない場合には要素が削除される。
var colors = [“red”, “green”, “orange”, “pink”, “black”]
colors[13] = [“blue”]
// [“red”, “blue”, “black”]
・配列の要素追加
var names = [“taro”, “jiro”]
names.append(“saburo”)
・for in 文
for (hoge, piyo) in dictionary {
     println(“\(hoge), \(piyo))
}

で可能。

※ただし、出力される要素の順番は不定。リテラルに記入した順や代入した順ではない点に注意 → だいぶ不便そう。

・任意の数の引数を受け取る

変数名のあとに … をつけることで、引数の数を限らずに配列として受け取れる。

func multiplyAll(nums: Double…) -> Double {
     var result = 1.0
     for num in nums {
          result *= num
     }
}
・関数内で値を変更した引数を呼び出し側に戻すには

関数側で引数の前に inout を指定する。
呼び出し側で引数の前に & をつける

func squaredNumber(inout num:Int) {
     num = num * num
}

var aNum = 4
squaredNumber(&aNum)
println(aNum) // 16
・型を柔軟に扱うジェネリクス

引数の型を確定させてしまうと不便な場合も多いので、ジェネリクスという仕組みがある。

func largervalue<T>(a: T, b:T) -> T {
     return a > b ? a : b
}

とすることでintでもdoubleでも比較できるようになる。
ちなみに上記関数は実はエラーが出る。 > の演算子がComparebleというプロトコルに純子した型しかしようできないため。

なので、引数に制約をつける必要がある。

func largervalue<T :compareble>(a: T, b:T) -> T {
     return a > b ? a : b
}

のように T :compareble にすることで比較可能なもののみが引数に入れられるようになる。

・クラスの継承

SubClass: SuperClass
の記法でかける。

xcodeでファイル名ダブルクリックで別タブで開く方法

デフォルトだとxcode上でダブルクリックすると別windowで開いて面倒だが、preference->Navigation->DoubleClickNavigationをUses Separate Tabでなんとかなる。


ちなみに今回の記事等は下の本を読んで学びました。

XcodeではじめるSwiftプログラミング

XcodeではじめるSwiftプログラミング