개발_iOS/스위프트
[Swift] 100 Days of Swift - Day 14 정리
sophie_l
2022. 4. 1. 22:14
https://www.hackingwithswift.com/100/14
Day 14 – 100 Days of Swift
Follow the 100 Days of Swift and learn to build apps for free.
www.hackingwithswift.com
1. external parameter name을 정할 때 _를 사용하면 편리한 경우가 많지만, "in", "for", "with"와 같은 이름을 사용하는 게 더 스위프트적인 방식이다. 의미있는 internal names와 함께 사용.
2. 옵셔널
func getFood(mood: String) -> String? {
if mood == "sad" {
return nil
} else {
return "Burger"
}
}
var food: String?
food = getFood(mood: "happy")
// 혹은
var food = getFood(mood: "happy")
// 처럼 옵셔널로 선언해주어야 한다.
/* 만일
var food: String
이라고 하면 코드가 작동하지 않을 것임 */
3. enumeration: possible value를 정해줌으로써 애매한 표현 등의 문제를 피하게 해줌
enum MoodType {
case happy, sad, mad, annoyed, bored
}
/*
enum MoodType {
case happy
case sad
case mad
case annoyed
case bored
}
처럼 써줄 수도 있음
*/
func getFood(mood: MoodType) -> String? {
if mood == MoodType.sad { // .sad로 적어줘도 됨
return nil
} else {
return "Burger"
}
}
getFood(mood: .annoyed)
enum MoodType {
case happy
case sad
case mad(intensity: Int)
case annoyed
case bored
}
func getFood(mood: MoodType) -> String? {
switch mood {
case .sad:
return nil
case .mad(let intensity) where intensity > 50:
return "NOT IN THE MOOD"
case .happy, .mad:
return "Burger"
case .annoyed, .bored:
return "Hot Pot"
}
}
getFood(mood: MoodType.mad(intensity: 30))
스위프트에서 가장 강력한 기능 중 하나는 enumerations가 사용자가 정의하여 부착하는 값을 가질 수 있다는 것.
case 안에서 let과 where을 사용함으로써 해당 조건이 참일 때만 해당 케이스에 걸리게 함.
4. class initializer: 만들 때 func 없이 init만 써줌. 구조체와 다르게 memberwise initializer가 없기 때문에 따로 이니셜라이저를 만들어줘야 함. 이외에 옵셔널을 쓰거나 default value를 줄 수도 있으나 직접 이니셜라이저를 구현하는 게 가장 좋은 방법.
5. 클래스 상속과 오버라이딩
class FBI {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
func say() {
print("Put your hands where I can see them")
}
}
class DrSpencerReid: FBI {
var numberOfDegrees: Int
init(name: String, age: Int, numberOfDegrees: Int) {
self.numberOfDegrees = numberOfDegrees
super.init(name: name, age: age)
}
override func say() {
print("This is calm and it's doctor")
}
}