medium 회원가입하고 관심사 필수 선택하래서 했는데 이메일로 읽어볼 리스트를 보내주었다.
그 중 하나를 간단하게 번역해보려고 한다.
모바일 개발 자체 경력으로는 2년이 넘어가지만, Swift를 시작한지는 한 3개월 정도 되었나.
모르는 것이 대부분이다. 눈물로 강을 이룰 예정,,,ㅎㅎ
!해석이 정확하지 않으니 원글을 확인하세요.!
빈 변수를 적는 방법
//Declare Variable Alternative
var name: String = String() // String = "" (not better)
var age: Int = Int() // Int = 0 (not better)
var cities: [String] = [String]() // [String] = [] (not better)
기본 값을 정의할 때는
var number = Int(0)
이런 식으로
선언한 불린과 문자열을 사용하는 방법 중 하나
//declare variable
var isAuthenticated: Bool = false
let firstName: String = "John"
let lastName: String = "Doe"
이런 변수들을 선언한다 했을 때,
불린 타입 같은 경우 -> isAuthenticated.toggle()
문자열은 -> let fullName: String = "\(firstName) \(lastName)"
이렇게도 쓸 수 있다.
(오호)
함수에서 매개변수를 적는 방법
1. (name: String, value: Int)
(name: "Paul", value: 20)
= 기본적인 스타일
2. (name: String, value: Int)
(for: "Paul", to: 20)
= 매개변수 이름을 for, to 등으로 단순하게 지정
3. (_ name: String, value: Int)
("Paul", to: 20)
= 매개변수를 쓰지 않겠다
Guard 문
값이 유효한지 여부를 확인할 때 조건문을 쓰는데 가드 문을 사용하면 더 가독성이 있다는 내용
Additional
기본 값을 이용해 코드를 더 짧게 만드는 방법을 알고 있다함.
//Unique Case for default array
var scoresForUser: [User: Array<Int>] = [:]
: 각 유저(User)가 존재하고 그에 다른 점수가 배열로 존재하는 딕셔너리([:]) 형태
<Before>
func addScore(_ score: Int, for user: User) {
//check user existing in array
if let existingArray = scoresForUser[user] {
//update new score for user
var newArray = existingArray
newArray.append(score)
scoresForUser[user] = newArray
} else {
//add new user to array
scoresForUser[user] = [score]
}
}
: 유저의 점수 유무를 확인하고, 없으면 else 문에서 [score]을 만듬.
이미 유저가 점수를 가지고 있을 때,
새로운 배열에 기존 배열을 대입하고(복사)
그 새로운 배열에 새로운 점수를 추가(데이터 추가)
그 새로운 배열을 유저 데이터로 업데이트하는 코드이다.
<After>
//you can handle that by using default if user not exist like this!
func addScoreNew(_ score: Int, for user: User){
scoresForUser[user, default: []].append(score)
}
일단,
scoresForUser[user, default: []] 이 식은 => scoresForUser 딕셔너리에서 user의 키에 대한 값을 찾는다.
default : [] 를 통해서, 만약 user의 딕셔너리가 존재하지 않으면 해당 user에 대한 값을 []로 한다.
= 유저가 이미 존재하는 경우에만 .append(score)을 통해 해당 유저 키를 찾아 값을 추가하고, 사용자가 존재하지 않는 경우 즉 유저 키에 대한 딕셔너리가 존재하지 않은 경우에는 새 사용자를 딕셔너리에 추가하고 해당 사용자의 점수 배열을 시작한다.
대박이군...
코드양이 확 줄어든다는 점에서 좋다.
한 편으로는 저 코드를 모든 사람이 이해해야 의미가 있다.
나만 알고 있으면 나만 알고 있는 코드가 되니까.
하튼 괜찮은거 알게 되었는데 과연 잘 쓸 수 있을지 모르겠다.
이제 퇴근!
+) 추가
이미 Foundation에 내장된 기능을 이용하기
var bool = false
bool.toggle() // bool = true
struct Person {
let name: String
let age: Int
}
var array = [Person(name: "John", age: 30), Person(name: "Jane", age: 20), Person(name: "Mike", age: 20)]
print(array.map({ $0.name })) // ["John", "Jane", "Mike"]
print(array.filter({ $0.age == 30 })) // [{"John", 30}]
array.forEach{print($0.name)} // "John" "Jane" "Mike"
'Swift' 카테고리의 다른 글
[상태 관리] Swift - observable, View life cycle (0) | 2023.10.24 |
---|---|
[디자인 패턴] MVVM 요약 정리 with Swift (0) | 2023.10.23 |
[TIL] 스위프트 공식 튜토리얼 따라하기(2) - 카드 뷰(card view) 만들기 (1) | 2023.10.16 |
[TIL] 스위프트 공식 튜토리얼 따라하기(1) - 스택을 이용한 배열 (0) | 2023.10.13 |
[TIL] A Swift Tour 대충이지만 읽기 완료! (0) | 2023.09.13 |