본문 바로가기
Swift

더 나은 iOS 개발자가 되기 위한 팁 (번역, 요약)

by yj.yoon 2023. 11. 16.

 

 

How to be better iOS Developer using this tips!

When you first start writing code, it’s exciting to be able to solve problems with code. You may have also felt the satisfaction of…

medium.com

 

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"