Last active
February 28, 2016 11:39
-
-
Save shrkw/7dc6d0e03c62e5db4b2c to your computer and use it in GitHub Desktop.
swift playground
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
//: Playground - noun: a place where people can play | |
import Cocoa | |
// string | |
var str = "Hello, playgroundaaa" | |
var ihoho = 34343 | |
print(str) | |
str = "ニーハオ" + str | |
str += "オゲホゲ" | |
"abc".uppercaseString | |
var bear = "🐻" | |
// http://tea-leaves.jp/swift/content/%E6%96%87%E5%AD%97%E5%9E%8B | |
// string interpolation | |
var hitPoint = 10 | |
var message = "スライムのHPは\(hitPoint)です。" | |
var val = 1 | |
for i in 1...10 { | |
val += i | |
} | |
// 定数 | |
let pi = 3.14 | |
let arr = [12,23] | |
arr[0] | |
//arr.append(33) | |
// ちゃんとimmutableにしてくれている | |
var ar = [12] | |
ar.append(34) | |
var animalLegs = ["Bird":2, "Dog":4, "Spider":8] | |
animalLegs["Spider"] | |
for (k,v) in animalLegs { | |
k + String(v) | |
} | |
let num = 11 | |
var card = "" | |
switch num { | |
case 1: | |
card = "A" | |
case 2...10: | |
card = String(num) | |
case 11: | |
card = "J" | |
case 12: | |
card = "Q" | |
case 13: | |
card = "K" | |
default: | |
break | |
} | |
// Enum | |
enum Color: String { | |
case Red = "赤" | |
case Blue = "青" | |
case White = "白" | |
} | |
Color.Blue | |
Color.White.rawValue | |
// Optional | |
var op: Optional<Int> = 5 | |
var op2: Int? = 4 | |
op | |
op2 = nil | |
op | |
op! | |
op | |
3 + op! | |
5 + (op2 ?? 10) | |
let strings = ["2", "3", "four", "5"] | |
var nums = strings.map{Int($0)} | |
nums | |
nums = nums.filter{$0 != nil } | |
nums | |
nums.map {$0! } | |
var a2: Int? = nil | |
a2.map { $0 * $0 } | |
// function | |
func square(i:Int) -> Int { | |
return i * i | |
} | |
// return ないと怒られる。それはよしなにして欲しかった | |
square(3) | |
let sq = square | |
sq(3) | |
// Anonymous funciton | |
let anon = { (i:Int) -> Int in | |
i*i | |
} | |
// ブレイスで囲めばfuncとして扱うようだ | |
anon(4) | |
anon | |
// 以下は等価 | |
let add = { (p1:Int, p2:Int) -> Int in p1 + p2 } | |
let and2: (Int, Int) -> Int = { p1, p2 in | |
p1 + p2 | |
} | |
// 前者の方が綺麗だろう | |
// returnは省略可能 | |
and2(3,4) | |
// Higher order function | |
func concat (p1: String, op: String -> String) -> String { | |
return "🗿" + op(p1) + "🗿" | |
} | |
var aa = concat("john", op: {$0.uppercaseString}) | |
aa | |
func add2(p1: Int, p2: Int, closure: (Int, Int) -> Int) -> Int { | |
return closure(p1, p2) | |
} | |
add2(1, p2: 2, closure: { $0 + $1 }) | |
// add2(1, 2, +) | |
// missing argument labelと言われる。二つ目以降の引数は引数名が必要なようだ | |
// 過去のSwiftにはlabelというのがあり引数 | |
// Operator function | |
add2(1, p2: 2, closure: +) | |
// default argument | |
func greet(name: String = "world") -> String { | |
return "hello \(name)" | |
} | |
greet() | |
greet("Guerrero") | |
// Tailing Closure | |
add2(1, p2: 2) { $0 + $1 } | |
// Capturing value | |
func addNumber(number: Int) -> () -> Int { | |
var sum = 0 | |
func add() -> Int { | |
sum += number | |
return sum | |
} | |
return add | |
} | |
let addTen = addNumber(10) | |
addTen() // 10 | |
addTen() // 20 | |
addTen() // 30 | |
let addSeven = addNumber(7) | |
addSeven() // 7 | |
addSeven() // 14 | |
addSeven() // 21 | |
addTen() // 40 | |
// http://qiita.com/mokumoku/items/1c1f6f0a9afc5d82a2c0 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment