ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

Swiftを勉強してみた。その3

スポンサードリンク

その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