# Swift 언어 개발문서

# Swift 둘러보기져

# 변수

var myVariable = 42
let Pi = 3.14
let explicitDouble: Double = 70
let label = "pi is"
let piLabel = label + String(Pi)

let apples = 3
let oranges = 5
let fruitDesc = "I have \(apples + oranges) fruits."

//배열, 딕셔너리
var shopList = ['catfish', 'water', 'tulips'];
var ageDic = [
    "Jay":"22",
    "Ingeeks":"25"
]
ageDic["Dajung"] = "1"

let emptyArray = String[]()
let emptyArray2 = []
let emptyDic = Dictionary<String, Float>()
let emptyDic2 = [:]

# 흐름 제어

let scoreList = [12, 23, 34]
var teamScore = 0
for score in scoreList {
    if score>20 {
        teamScore += 3
    } else {
        teamScore += 1
    }
}

//값의 타입 뒤에 ?를 붙이면 옵셔널 값. ?이 없으면 nil이 들어가지 않는다.
var optionalString: String? = "Hello"
optionalString = nil

var optionalName: String? = "Jay"
var greeting = "Hello"
if let name = optionalName { //옵션값이 nil이면 조건문 false로 안들어감.
    greeting = "Hello, \(name)"
}

//switch. break키워드 안써도 된다.
let vagetable = "red pepper"
switch vegetable {
    case "vege1":
        let vegeCmt = "This is vege 1"
    case "vege2", "vege3":
        let vegeCmt = "This is haha"
    case let x where x.hasSuffix("pepper"):
        let vegeCmt = "This is pepper"
    default:
        let vegeCmt = "This is default"
}

//for-in
let interestingNumbers = [
  "Prime": [2, 3, 5, 7, 11, 13],
  "Fibonacci": [1, 1, 2, 3, 5, 8],
  "Square": [1, 4, 9, 16, 25],
]
var largest = 0
for (kind, numbers) in interestingNumbers {
  for number in numbers {
    if number > largest {
       largest = number
    }
  }
}

//while, do
var n = 2
while n < 100 {
    n = n * 2
}
n

var m = 2
do {
    m = m * 2
} while m < 100

..을 사용해서 범위를 지정하면 제일 맨 마지막 값은 제외됩니다. 반면에 ...을 사용하면 양쪽 끝의 값을 모두 범위에 포함하게 됩니다.

# 함수와 클로져

//함수 안의 함수
func makeIncrementer() -> (Int -> Int) {
  func addOne(number: Int) -> Int {
    return 1 + number
  }
  return addOne
}
var increment = makeIncrementer()
increment(7)

//인자를 함수로 받기
func hasAnyMatches(list: Int[], condition: Int -> Bool) -> Bool {
      for item in list {
          if condition(item) {
              return true
          }
      }
      return false
  }
  func lessThanTen(number: Int) -> Bool {
      return number < 10
  }
  var numbers = [20, 19, 7, 12]
  hasAnyMatches(numbers, lessThanTen)

//실제로 함수는 클로저의 특별한 예.
numbers.map({
  (number: Int) -> Int in
  let result = 3 * number
  return result
})

# Refer

http://swift.leantra.kr/#a-swift-tour