Skip to content

Instantly share code, notes, and snippets.

@YuheiNakasaka
Last active August 29, 2015 14:09
Show Gist options
  • Save YuheiNakasaka/113b655c48b9efabfafc to your computer and use it in GitHub Desktop.
Save YuheiNakasaka/113b655c48b9efabfafc to your computer and use it in GitHub Desktop.
swift練習
#! /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