その3。関数とかクラス。
関数
func sayHi() { print("Hi") } sayHi()
引数受け取り
func sayHi(name: String) { print("Hi " + name) } sayHi("Tom")
引数ラベル(なつかしい)
func sayHi(myName name: String) { print("Hi " + name) } sayHi(myName: "Tom") // こういう書き方もおk // func sayHi(#name: String) { // ... // sayHi(name: "Bob") // 初期値も宣言できる // func sayHi(#name: String = "Job") {
返り値の型の書き方
func sum(a:Int, b:Int) -> Int { return a + b } // 呼び出し print (sum(5, 12))
tuppleで返す
func swap(a: Int, b:Int) -> (Int, Int) { return (b, a) } print(swap(5, 2))
// こういう書き方はSwift2.0以降はエラーになる // func f(var a:Int) -> Int { // error: Use of 'var' binding here is not allowed - 初期値はここではかかないでねー func f(a:Int) -> Int { a = 20 return a } // 値渡し var a = 5 print(f(a)) // 20 print(a) // 5 // 参照渡し func f2(inout a:Int) -> Int { a = 20 return a } var a = 10 print(f2(&a)) // 20 print(a) // 20
列挙型
なつかしい
enum Result: Int { case Success = 0 case Error } // 型も宣言しないと下記エラーが出力された // enum case cannot have a raw value if the enum does not have a raw type // こんなして使う var r: Result // r = Result.Success r = .Success // 型はわかっているから省略することもできる print(Result.Error.rawValue) // 1 // 関数も使える enum Result2: Int { case Success = 0 case Error func getMessage() -> String { switch self { case .Success: return "Ok" case .Error: return "NG" } } } var r2: Result2 print(Result2.Success.getMessage()) // OK print(Result2.Error.getMessage()) // NG
クラス
// 変数はプロパティ // 関数はメソッドになる class User { //var name: String? // 初期化しなければOptional型にしないとだめ var name: String var score: Int = 0 // 初期化 // nameプロパティの続き // それかコンストラクタを作成すればおk init(name: String) { self.name = name } func upgrade() { score++ } } var aipa = User(name: "aipa") // init print(aipa.name) // aipa print(aipa.score) // 0 aipa.upgrade() print(aipa.score) // 1