스마트폰, 데스크톱, 서버 또는 코드를 실행하는 기타 모든 것을 위한 소프트웨어를 만들 수 있는 현대적인 언어 개념과 애플 엔지니어링 문화의 지혜와 오픈 소스 커뮤니티의 다양한 기여로 구성된 안전하고 빠르며 상호작용적인 프로그래밍 언어라고 한다. Fantastic 하다고 소개를 하는데 Swift에 대해 기본부터 차근차근 공부해보려고 한다.
swift는 상수를 만들려면 'let'을 사용하고, 변수를 만들려면 'var'을 사용한다. 상수의 값은 컴파일 시간에 미리 알 필요는 없지만 한 번 정확히 값을 할당해야 한다.
var myVariable = 42
myVariable = 50
let myConstant = 42
상수나 변수는 값을 할당하려는 값과 동일한 유형을 가져야 하는데 항상 유형을 명시적으로 작성할 필요는 없기 때문에 상수나 변수를 만들 때 값을 제공하면 컴파일러가 그 유형을 추론한다.
let implicitInteger = 70
let implicitDouble = 70.0
let explicitDouble: Double = 70
조건문을 만들려면 다른 언어들과 똑같이 'if'와 'switch'를 사용하고, 반복문을 만들려면 'for-in', 'while', 'repeat-while'을 사용한다. 자바스크립트와는 다르게 조건식을 () 없이 사용할 수 있고 'if' 문에서 조건식은 Boolean 표현식이어야 한다. 이 말의 뜻은 자바스크립트처럼 0과의 암묵적 비교 아닌 true 혹은 false의 값만 조건식으로 사용될 수 있다는 뜻이다. 그래서 score { ... }와 같은 코드는 swift에서는 오류이다.
let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores {
if score > 50 {
teamScore += 3
} else {
teamScore += 1
}
}
print(teamScore)
// Prints "11"
변수의 값을 할당할 때에도 조건문을 사용할 수 있다.
let scoreDecoration = if teamScore > 10 {
"🎉"
} else {
""
}
print("Score:", teamScore, scoreDecoration)
// Prints "Score: 11 🎉"
Swift에서는 'if'와 'let'을 함께 사용하여 누락될 수 있는 값을 처리할 수 있는데 이러한 값은 옵셔널로 표시된다. 옵셔널 값은 값이 포함되어 있거나 값이 누락되었음을 나타내기 위해 nil이 포함된다. 값을 옵셔널로 표시하려면 값의 유형 뒤에 물음표 (?)를 작성해야 한다.
이런 식으로 만들어진 타입스크립트가
const optionalName: string | null = "John Appleseed";
let greeting: string = "Hello!";
if (optionalName !== null) {
greeting = `Hello, ${optionalName}`;
}
Swift에서는 let과 if를 사용해서 이렇게 표현되는 것 같다.
var optionalString: String? = "Hello"
print(optionalString == nil)
// Prints "false"
var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
greeting = "Hello, \(name)"
}
옵셔널 값을 처리하는 또 다른 방법은 '??' 연산자를 사용하여 기본 값을 사용하는 것인데 이 부분은 자바스크립트와 같은 방법이다.
let nickname: String? = nil
let fullName: String = "John Appleseed"
let informalGreeting = "Hi \(nickname ?? fullName)"
Switch는 자바스크립트와 다르게 모든 케이스에 break을 넣지 않아도 해당 케이스에 코드가 실행된 후에 자동으로 빠져나온다. 그렇기 때문에 강제로 다음 케이스의 코드를 실행하고 싶다면 fallThrough을 사용하면 된다.
let vegetable = "red pepper"
switch vegetable {
case "celery":
print("Add some raisins and make ants on a log.")
case "cucumber", "watercress":
print("That would make a good tea sandwich.")
case let x where x.hasSuffix("pepper"):
print("Is it a spicy \(x)?")
default:
print("Everything tastes good in soup.")
}
자바스크립트에서는 for of와 for in을 사용해서 for 루프를 도는데 Swift에서는 for in 만 사용하는 것 같다. 그리고 Dictonary 타입은 리스트 형식 안에 Key와 Value 쌍으로 데이터를 저장하고 for in으로 iterate 할 수 있다.
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 (_, numbers) in interestingNumbers {
for number in numbers {
if number > largest {
largest = number
}
}
}
print(largest)
// Prints "25"
while과 repeat-while은 자바스크립트의 while과 do-while과 똑같이 작동한다.
var n = 2
while n < 100 {
n *= 2
}
print(n)
// Prints "128"
var m = 2
repeat {
m *= 2
} while m < 100
print(m)
// Prints "128"
Swift에서 for 루프를 사용할 때 range를 특별하게 사용할 수 있는데 다음과 같이 사용한다.
var total = 0
for i in 0..<4 {
total += i
}
print(total)
// Prints "6"
'..<'를 사용하여 상한 값은 포함하지 않는 범위를 만들고, '...'를 사용하여 양쪽 값을 모두 포함하는 범위를 만들어서 사용할 수 있다.
참조: https://docs.swift.org/swift-book/documentation/the-swift-programming-language/guidedtour