기준
- 활동학습 했던 내용
- 프로젝트 회고 항목
iOS에서 사용하는 미리 알림 (Reminders) 앱에 HIG가 적용된 방식을 분석하여 스토리보드 형태로 표현
각 칸을 cell으로 지칭, 보통 cell content는 왼쪽, accessory view는 오른쪽에 나타냄 (disclosure indicator 등), tableView가 큰 단위로 묶인 것을 section으로 지칭.
메뉴 하나를 탭하였을 때 더 깊은 곳으로 가도록 구성. 1 - 2 - 3 - 4 - 3 - 2 - 1 같이 작동. jump 안됨. 깊은 단계로 진입할 때 이전에 진입한 레벨들의 창이 덮히는 형식이기 때문에 생명주기가 계속 살아있는 상태. 빠져나오면 꺼짐.
안전하게 contents가 표시될 수 있는 영역을 뜻함.
정보의 흐름대로 깊어지는 내용 흐름이 이어진다.
폴더 - 메모 - 메모 데이터 형식.
ex) email
정보의 흐름을 해치지 않고 싶을 때 사용.
흐름 안에서 잠깐 해결하고 온다. (내려놓고 새로운 것을 잠깐 작성한다.) 잠시 다른 곳에 다녀온다.
ex) 웹페이지 팝업
allCases
배열을 활용할 수 있고, allCases.randomElement()
메서드를 활용하여 무작위로 열거 타입 내 케이스를 선정할 수 있다. 옵셔널 형태로 출력되므로 추출을 위해 옵셔널 바인딩이 필요하다.enum RockPaperScissors: CaseIterable {
case scissor, rock, paper
}
if let randomElement = RockPaperScissors.allCases.randomElement() {
print(randomElement) // scissor or rock or paper
}
allCases
배열은 static
접두어를 통해 타입 프로퍼티로 재정의가 가능하다.enum RockPaperScissors: CaseIterable {
case none, scissor, rock, paper
static var allCases: [RockPaperScissors] = [.scissor, .rock, .paper]
}
if let randomElement = RockPaperScissors.allCases.randomElement() {
print(randomElement) // scissor or rock or paper
}
현직 iOS개발자들의 주니어 iOS개발자, 예비 개발자들에게 전하는 메시지 (진입계기, 코딩테스트에 대한 의견, 포트폴리오, 커뮤니티 활동, 크로스 플랫폼에 대한 의견)
개발자의 글쓰기에 대한 이중민님의 특강
강의 내용 일부
승패 판단(승리 케이스 = 상대방 수 % 3 + 1
)에 활용하기 위해 가위바위보를 열거형에서 각각 1, 2, 3의 정수형으로 정의하였고, RockPaperScissors
타입 (게임 진행 관련 프로퍼티 및 메서드 구현 타입)에서 열거형 내의 값을 rawValue
로 받아 처리하고 있었는데, 이런 사용 방법은 은닉화의 측면에서 진행이 덜 되었다는 피드백을 받았다. 확실히 처음 우리가 짠 코드를 접한다면 누구라도 rawValue
가 어떻게 정의되어 있길래 이렇게 사용하였는지에 대해 궁금해할 것 같았다. 오늘 코드 리팩터링을 할 때 단순히 CaseIterable
프로토콜의 allCases
배열의 index
값을 반환하는 메서드를 추가하여 rawValue
활용을 피했는데, 방금 전 별반 다를바 없다는 피드백이 왔다. 승패 판단을 위해 꼭 정수형으로 받아야하는데.. 고민이다.
또, 우리 코드의 경우 checkInvalidInput() -> Int
메서드에서 에러를 반환하는데 정수형으로 반환하여야 하기에 에러처리에 의미 없는 정수값을 활용하고 있다. 이것도 같이 풀어야할 숙제다.
if let
구문을 두 번 작성할 필요 없이 쉼표로 여러 변수, 상수들을 동시에 처리할 수 있다. 지금까지 옵셔널 바인딩 구문 안에 한 번 더 작성했었는데.. 그래도 변수명은 필요하구나.if let userInput: String = readLine(), let intUserInput: Int = Int(userInput) { // 7 입력
print(type(of: userInput), type(of: intUserInput)) // String Int
print(userInput, intUserinput) // 7 7
}