Swift로 프로그래머스의 짝수의 합 이라는 문제를 푸는데, Swift가 아직 익숙치 않다 보니 좀 구질구질하게... 생각나는대로 풀었다.
👉🏻 첫 풀이
import Foundation
func solution(_ n:Int) -> Int {
var num = n
var sum = 0
if num % 2 == 1 {
num -= 1
}
while num > 0 {
sum += num
num -= 2
}
return sum
}
조건문으로 풀면 되는걸 구질구질하게 풀었다 싶어서 다른 사람의 풀이를 보는데,
SQL에서만 봤던 whereWHERE을 사용하고 있는 것이 아닌가.
👉🏻 Where을 사용한 풀이
import Foundation
func solution(_ n:Int) -> Int {
var sum = 0
for i in 1...n where i % 2 == 0 {
sum += i
}
return sum
}
if 문을 한번 더 쓰지 않고 where이라는 절을 사용하여 간결하게 코드를 끝냈길래, Swift에서는 where를 어떻게 쓰는지 궁금해서 찾아보게 되었다.
Swift에서 where을 쓰는 여러 경우를 살펴보자.
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for number in numbers where number % 2 == 0 {
print(number)
}
특정 조건을 만족하는 요소에 대해서만 반복문 안의 본문이 실행되도록 할 수 있다.
Swift의 Switch-case 문에서, case에 조건을 추가할 때 where을 사용하여 더 세밀한 분기를 할 수 있다.
let somePoint = (1, 1)
switch somePoint {
case let (x, y) where x == y:
print("x와 y가 같은 경우")
case let (x, y) where x == -y:
print("x와 y가 서로 반대인 경우")
case (_, _):
print("그 외의 경우")
}
제네릭을 잘모르는대 대충 범용 타입이라는 느낌인 것 같다. 일단 차차 공부하기로 하고 느낌만 가져가보자.
💻 출처: 서근 개발노트 - Tistory
Swift에는 제네릭이라는 범용 타입이 있다. 배열(Array), 딕셔너리(Dictionary), 세트(Set) 도 제네릭이며, Int나 String등도 제네릭으로 변환하여 사용할 수 있다. Apple에 의하면 제네릭을 사용해 코드를 구현하면, 아주 유연하고 재사용성 높은 코드를 작성할 수 있다고 한다. 또, 제네릭으로 구현한 기능과 타입은 재사용하기도 쉽고, 중복을 줄일 수 있기 때문에 깔끔하고 추상적인 표현이 가능하다.
무튼 이 제네릭을 사용할 때, 타입 제약 조건으로 where을 사용할 수 있다고 한다.
Swift는 개발 과정에서 여러 프로토콜을 채택하고, 이를 extension으로 끌어와 조건을 추가할 수 있는 것 같다. 아직 프로토콜을 잘 몰라서 예시만 일단 남겨둔다.
protocol Container {
associatedtype Item
mutating func append(_ item: Item)
var count: Int { get }
subscript(i: Int) -> Item { get }
}
// Sequence 프로토콜을 준수하고, Iterator의 Element가 Equatable을 준수하는 경우에만
// Extension이 적용되도록 함
extension Container where Item: Equatable {
func startsWith(_ item: Item) -> Bool {
return count >= 1 && self[0] == item
}
}
Swift로 기초부터 풀어보고 있는데, 문법이랑 타입 지정하고 이런게 아직 익숙치가 않다. 정규기간까지 열시미 공부해서 정규수업 잘 따라잡아야겠다.