let label = "The width is "
let width = 94
let widthLabel = label + String(width) // String은 String의 생성자 호출, "The width is 94"
let height = Int("10") // 10
let sheight = Int("10.5") // nil
let dheight = Int(10.5) // 10
let apples = 3
let appleSummary = "I have \(apples) apples"
// 배열 선언
var list1: [Int] = [] // Int를 저장하는 빈 배열, 명시적
var list2: [Int]() // Int를 저장하는 빈 배열, 암시적
var itemList = ["pen", "book', "bag"]
let first = itemList.first // itemList[0]
let last = itemList.last // itemList[-1]
first, last는 컴파일이 아니라 런타임에 실행 -> Optional
var x = [10, 10.5] // x의 타입은 [Double]
var y = [10, 10.5, "20.5"] // 타입 불일치로 자동 형변환 불가능 -> 에러처리
var z: [Any] = [10, 10.5, "20.5"] // z의 타입은 [Any], 상위 타입으로 모든 타입 가짐
// 딕셔너리 선언
var dic1: [String: Int] = [:] // <문자열, 값>으로 저장하는 딕셔너리, 명시적
var dic2: [String: Int]() // <문자열, 값>으로 저장하는 딕셔너리, 암시적
var students = ["홍길동": 12345, "김영희": 23456] // 딕셔너리 초기화
students["김철수"] = 34567 // 딕셔너리에 요소 추가
let friend = students["cong"] // 에러, "cong"이 저장되어 있지 않기 때문
if (condition && condition1) {
}
if condition, condition1 {
}
위의 두개는 같은 의미
var x = 10
var y = 20
if (x == 10 && y == 20) { // 괄호를 없애고, &&를 콤마로 바꿔도 됨 but, 괄호는 조건문을 나타내므로 조건문 안에서 &&을 콤마로 바꾸는 건 안됨
print("OK")
} else {
print("error")
}
let vegetable = "red pepper"
swith vegetable {
case "celery":
let vegetableComment = "Add some raisins and make ants on a log."
case "cucumber", "watercress": // 콤마로 케이스를 연결 가능
let vegetableComment = "That would make a good tea sandwich."
case let x where x.hasSuffix("pepper"): // 조건절 가능, x의 접미사 비교
let vegetableComment = "Is it a spicy \(x)?"
default:
let vegetableComment = "Everything tastes good in soup"
let variableNumbers = [
"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 variableNumbers { // (kind, numbers) 대신에 ( _, numbers)가 더 좋다
for number in numbers {
if number > largest {
largest = number
}
}
}
print(largest)
func greet(name: String, day: String) -> String // 반환값이 없는 경우 -> 생략 또는 -> Void
{
return "Hello \(name), today is \(day)."
}
greet(name: "Bob", day: "Tuesday") // 호출
greet(day: "Tuesday", name: "Bob") // 매개변수 순서가 바뀌면 에러, 파이썬과 다름
func greet(from name: String, today day: String) -> String {
return "Hello \(name), today is \(day)."
}
print(greet(from: "Bob", today: "Tuesday")) // 전달 인자로 호출
print(greet(name: "Bob", day: "Tuesday")) // 매개변수로 호출, 에러
func greet(from name: String, _ day: String) -> String {
return "Hello \(name), today is \(day)."
}
print(greet(from: "Bob", "Tuesday")) // 두번째 전달 매개변수가 없다
print(greet(name: "Bob", day: "Tuesday")) // day 넣으면 에러
// 가변 매개변수
func sumOf(numbers: Int...) -> Int {
var sum = 0
for number in numbers {
sum += number
}
return sum
}
print(sumOf()) // 0
print(sumOf(numbers: 42, 597, 12)) // 651
// 배열로 한개의 매개변수 전달
func sumOf(numbers: [Int]) -> Int {
var sum = 0
for number in numbers {
sum += number
}
return sum
}
print(sumOf(numbers: [42, 597, 12])) // 651
위의 두개는 동일함
func returnFifteen() -> Int {
var y = 10
func add() {
y += 5
}
add()
return y
}
returnFifteen()
func makeIncrementer() -> (Int) -> Int {
func addOne(number: Int) -> Int {
return 1 + number
}
return addOne
}
var increment - makeIncrement() // 함수 포인터를 리턴받은 값을 increment에 대입
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(list: numbers, condition: lessThanTen)