팀 프로젝트 UI 구상을 위해 피그마를 처음 사용해보았다.

어떻게 하는지는 전혀 모르고 UI만 그려보았는데 버튼을 눌렀을 때 어떤 화면으로 전환이 된다거나, 코드와 연계할 수 있다거나하는 기능이 많아 익숙해지면 다양하게 활용 가능할 것 같다.
캠프에서 제공되는 강의에 피그마 관련도 있어 프로젝트 틈틈히 수강할 예정이다.
📚 요소 추가하기
: += 연산자
배열에 하나 이상의 요소 추가 시 사용 가능
var numbers = [1, 2, 3]
numbers += [4, 5]
print(numbers) // [1, 2, 3, 4, 5]
📚 정렬하기
: sorted(by:) 혹은 sort(by:)를 사용
let numbers = [3, 1, 4, 1, 5, 9]
let descendingNumbers = numbers.sorted(by: >) // 내림차순
print(descendingNumbers) // [9, 5, 4, 3, 1, 1]
let ascendingNumbers = numbers.sorted(by: <) // 오름차순
print(ascendingNumbers) // [1, 1, 3, 4, 5, 9]
func sorted(by areInIncreasingOrder: (Self.Element, Self.Element) throws -> Bool) rethrows -> [Self.Element]
areInIncreasingOrder
첫 번째 아규먼트가 두 번째보다 앞에 와야한다면 '참'을 반환 - 해당 매개변수는 어느 아규먼트가 앞서야하는지를 정하는 분류 조건반환값
areInIncreasingOrder이 '참'인 요소를 순서대로 담은 배열
📚 기본값 제공
: 키가 존재하지 않을 경우 기본값 설정 가능
var studentScores = ["Alice": 90, "Bob": 85, "Charlie": 88]
let davidScore = studentScores["David", default: 0]
print(davidScore) // 0
print(studentScores) // ["Alice": 90, "Bob": 85, "Charlie": 88]
-> 기본값 제공은 존재하지 않는 키 조회 시 nil값이 나오지 않게 할 뿐, 기존 딕셔너리를 변경시키지 않음!
📚 기존 값 수정
: 이미 존재하는 키에 새로운 값 할당 시 값이 변경
studentScores["Alice"] = 95
print(studentScores) // ["Alice": 95, "Bob": 85, "Charlie": 88]
updateValue(_:forKey:)
: 값이 존재하면 기존 값을 반환하고 값을 변경하고, 없으면nil을 반환하고 값을 변경let oldValue = studentScores.updateValue(89, forKey: "Bob") print(studentScores) // ["Alice": 95, "Bob": 89, "Charlie": 88] // : "Bob"의 값이 85 -> 89로 변경 print(oldValue) // Optional(85) // : "Bob"의 기존 값인 85를 반환 (옵셔널 타입이므로 옵셔널로 반환)
📚 데이터 모델의 중요성
📚 MVC에서 데이터 모델의 역할
📚 데이터 추가하기
@objc func addItem() {
let newItem = "새 항목 \(items.count + 1)"
items.append(newItem) // items(데이터) 추가
let newIndexPath = IndexPath(row: items.count - 1, section: 0)
tableView.insertRows(at: [newIndexPath], with: .automatic) // 테이블뷰 UI에 데이터가 추가됨을 알림
}
→items의 수와 indexPath의 수가 일치해야 함! - items.append 전에 tbleView.insertRows(at:)을 하면 해당 열에 데이터가 없으므로 크래시 발생
📚 데이터 삭제하기
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
items.remove(at: indexPath.row) // items 배열에서 먼저 삭제
tableView.deleteRows(at: [indexPath], with: .automatic) // 테이블뷰 UI 삭제
}
}
📚 데이터 수정하기
func updateItem(at index: Int, with newValue: String) {
items[index] = newValue
let indexPath = IndexPath(row: index, section: 0)
tableView.reloadRows(at: [indexPath], with: .automatic)
}
⇒ 위 3가지 부분 갱신(insert, delete, reloadRows)가 reloadData()(전체 갱신)보다 성능 면에서 유리
💡
reloadData()사용 시점
- 배열 값 변경 시
- 외부에서 데이터를 받아온 후 (eg. 서버에서 응답을 받은 후)
- 필터링, 정렬, 전체 재구성이 일어났을 때
- 여러 셀을 한꺼번에 갱신할 때
본 캠프 첫 날이라 팀원들과 프로젝트를 구상하고 이야기 나눈다고 크게 학습을 했다고 할 만한건 없었다. 아직 생성밖에 안하긴 했지만 처음으로 github을 활용해 팀 프로젝트를 할 수 있음에 신기했다. 앞으로의 과정동안 합심하여 무사히 수료할 수 있기를!