1. isMultiple(of:) 메서드 활용
🔍 문제
func a(_ array: [Int]) -> [Int] {
return array.enumerated()
.filter { $0.offset % 2 == 0 }
.map { $0.element }
}
💡 해결
func a(_ array: [Int]) -> [Int] {
return array.enumerated()
.filter { $0.offset.isMultiple(of: 2) }
.map { $0.element }
}
.isMultiple(of:n): Swift 표준 라이브러리에서 제공하는 메서드로, 숫자가 n의 배수인지 판단하는 Bool 반환 함수
$0.offset % 2 == 0을 대체하여 활용함
- 가독성 향상 및 타입 안정성을 제공함
2. 불필요한 생성자 매개변수 제거
🔍 문제
class ElectricCar: Car {
init(brand: String, model: String, year: String, engine: Engine) {
super.init(brand: brand, model: model, year: year, engine: .ElectricEngine)
}
}
ElectricCar 클래스에서 engine 파라미터를 전달받지만, 내부적으로 고정됨
💡 해결
class ElectricCar: Car {
init(brand: String, model: String, year: String) {
super.init(brand: brand, model: model, year: year, engine: .ElectricEngine)
}
}
engine 파라미터를 제거하여, .ElectricEngine을 명시적으로 고정함
3. 값이 바뀌지 않을 때 didSet 실행 최소화
🔍 문제
var name: String {
didSet {
print("""
name 변경 알림
변경 이전 값: \(oldValue)
변경 이후 값: \(name)
""")
}
}
name 값이 동일하게 설정될 경우에도 didSet이 호출됨
💡 해결
var name: String {
didSet {
if oldValue != name {
print("""
name 변경 알림
변경 이전 값: \(oldValue)
변경 이후 값: \(name)
""")
}
}
}
name 값 변경 감지 조건을 추가하여, 불필요한 didSet 출력 방지
- 변경 이전값과 이후값이 같으면 출력되지 않음
4. 함수 타입 배열 실행 이슈
🔍 문제
for (index, function) in [level1(), level2(), level3()].enumerated() {
print("<필수 문제 \(index + 1)>")
function
print("--------------------")
}
level1()과 level2()는 배열을 만들 때 이미 실행되며, 배열에는 그 실행 결과인 Void가 들어감
function이 이미 실행 결과 값이라서 다시 실행되지 않음
💡 해결
for (index, function) in [level1, level2, level3].enumerated() {
print("<필수 문제 \(index + 1)>")
function()
print("--------------------")
}
() 없이 배열에 담아두고, 나중에 function()으로 실행해야 함
📂 전체 코드
https://github.com/Pjh01/AdvancedAssignment