소피it블로그

[Swift] 100 Days of Swift - Day 14 정리 본문

개발_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")
	}
}