Last active
August 29, 2015 14:09
-
-
Save YuheiNakasaka/113b655c48b9efabfafc to your computer and use it in GitHub Desktop.
swift練習
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /usr/bin/env xcrun swift | |
import Foundation | |
// 配列を返り値にするときは | |
//[String]とか[Int]を型としてセットする | |
func incr (n: Int...) -> (res:Int,init_val:[Int]) { | |
var res = 0 | |
var init_val = n | |
for i in n { | |
res = res + i | |
} | |
return (res,init_val) | |
} | |
var res = incr(1,2,3) | |
println(res) | |
// 一般的なクラス定義 | |
class Human { | |
var gender: String | |
var age: Int | |
var firstName: String | |
var lastName: String | |
init(firstName: String, lastName: String, gender: String,age: Int) { | |
self.firstName = firstName | |
self.lastName = lastName | |
self.gender = gender | |
self.age = age | |
} | |
func fullName() -> String { | |
var fullName = self.firstName + self.lastName | |
return fullName | |
} | |
func call() -> String { | |
return "" | |
} | |
} | |
let person = Human(firstName:"Yuhei",lastName:"Nakasaka",gender:"man",age:24) | |
println(person.fullName()) | |
println(person.age) | |
println(person.gender) | |
println(person.call()) // => "" | |
// 親のメソッドのオーバーライド | |
class Japanese: Human { | |
override func call() -> String { | |
return "こんにちわ" | |
} | |
} | |
let yuhei = Japanese(firstName:"雄平",lastName:"中坂",gender:"男",age:24) | |
println(yuhei.fullName()) | |
println(yuhei.age) | |
println(yuhei.gender) | |
println(yuhei.call()) // => こんにちわ | |
// enum(列挙型)はcaseに列挙した値の順に0,1,2,3...の数値を割り当てていく | |
// 関数も定義できる | |
enum Te: Int { | |
case right,left | |
} | |
let x = Te.left.rawValue | |
println(x) //=> 1 | |
// enumは関数も定義できる | |
enum Rank: Int { | |
case Ace = 1 | |
case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten | |
case Jack, Queen, King | |
func simpleDescription() -> String { | |
switch self { | |
case .Ace: | |
return "ace" | |
case .Jack: | |
return "jack" | |
case .Queen: | |
return "queen" | |
case .King: | |
return "king" | |
default: | |
return String(self.rawValue) | |
} | |
} | |
} | |
println(Rank.Five.simpleDescription()) | |
// 構造体の値を書き換えるときはmutatingを付けて関数を定義しなければならない | |
// 一方classではいつでもmutatingなのでmutatingキーワードはいらない | |
struct Gender { | |
var man: Int = 0 | |
var woman: Int = 1 | |
mutating func trans() { | |
var tmp = self.man | |
self.man = self.woman | |
self.woman = tmp | |
} | |
} | |
var g = Gender() | |
println(g.man) | |
println(g.woman) | |
g.trans() | |
println(g.man) | |
println(g.woman) | |
//extensionを使うと構造体にメソッドやpropertyを追加できる | |
protocol ExampleProtocol { | |
var simpleDescription: String {get} | |
mutating func double () -> Int | |
} | |
extension Int: ExampleProtocol { | |
var simpleDescription: String { | |
return "The number: \(self)" | |
} | |
mutating func double() -> Int { | |
return self * 2 | |
} | |
} | |
var number = 10 | |
println(10.simpleDescription) //=> The number: 10 | |
println(number.double().simpleDescription) //=> The number: 20 | |
// クラスは参照渡し、構造体は値渡し |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment