Hacking With Swift의 UI 강의를 보면서 이미 익히 활용해본 swiftUI의 개념과 모르던 UIkit 관련 개념을 착실히 정리해보고자 했다
App화면 : 앱 실행 관련 코드의 모음. 항상 켜져 있을 개체를 저장하는 데 사용
contentView : 첫 유저 인터페이스를 담고 있음
Assets.xcassets : asset catalog, 앱에 사용하고 싶은 이미지를 저장하는 곳, 색상이나 앱 아이콘, 아이메시지 스티커 등을 저장 가능
Preview Content : Preview Assets.xcassets가 들어있는 그룹. 또다른 카탈로그로 UI 디자인시 사용하고자 하는 예시 이미지를 저장하고 프로그램이 어떻게 보일지에 대한 예시 저장
Content View
import SwfitUI : 스위프트 프레임워크 사용
struct ContentView : View
ContentView라는 struct 생성. 이것이 View 프로토콜에 속한다고 밝혀줌
View는 swiftUI에서 제공하는 기본 프로토콜.
var body : some View
새로운 computed property, body를 선언.
some View라는 타입을 가짐.
View 프로토콜은 오직 하나의 필수사항이 있음. 바로 바디. (항상 있어야 함)
VStack
Text는 static text의 일부로 필요에 따라 여러줄에 걸쳐 자동 래핑됨
imageScale(), foregroundStyle(), padding()은 메소드 (이미지나 VStack에 불러짐)
이걸 스위프트UI에서 모디파이어라고 함.
#preview는 Xcode 기능 중 캔버스라는 기능을 사용함
option+Cmd+P 프리뷰 리프레쉬
Form : 스크롤 가능한 리스트, 정적 컨트롤들 (텍스트나 이미지)들의 리스트이지만 동시에 유저 상호작용 가능한 컨트롤들 (textfield나 토글 스위치, 버튼 등)을 포함할 수 있음
Section 비주얼 적으로 나눠주기
Navigation bars : title이나 버튼 가지기 가능
Navigation Stack으로 미리 컨텐츠 덮어둬야 함
.navigationTitle("") 모디파이어
property wrapper: 프로퍼티 앞에서 특수한 속성 부여
@State : 한 뷰 안에서 저장되는 값
Apple은 state 뒤에 private를 붙이기를 권장
two-way binding : 1) 뷰 컨트롤에 프로퍼티값이 보이게 설정하기 2) 컨트롤의 변경값이 프로퍼티를 업데이트 하게 설정하기
$
View라는 거대한 단위의 프로토콜 사이에서 세부 디테일은 이미 있는 메소드인 모디파이어를 이용하여 수정하고, 내부 프로퍼티를 동기화하기 위하여 프로퍼티 래퍼를 사용한다
import UIkit
class ViewController : UIViewController (애플 기본 스크린 타입, 텅비고 하얀색)
UI로 시작되는 데이터타입은 UIKit.
override func viewDidLoad()
애플 기본 행동을 바꾸고 싶기 떄문에 override 기능 사용
스크린이 loaded돼어 커스터마이즈 준비되었을 때 불려짐
super.viewDidLoad()
내가 내 코드 실행 전에 UIViewController가 그 자신의 코드를 실행하게 하는 코드
FileManager.default (파일 시스템과 일하게 하는 데이터 타입)
Bundle.main.resourcePath : 우리 앱의 리소스 페스.
bundle은 컴파일된 프로그램과 에셋을 저장하는 디렉토리이고 이것은 내가 앱에 추가한 이미지들을 어디서 찾을지 알려달라는 뜻
UITableViewController <- UIViewController : 가장 베이직 타입 스크린.
UIViewController 기반, 위에 그려짐 (클래스 계층구조). 데이터 열을 스크롤 가능하게 보여주고 선택가능하게 하는 화면
(SwiftUI form 같은 느낌인가)
User interfaces : 코드로만 수정도 가능하지만 그래픽 에디터에 의해 보통 구성됨. Interface Builder라고 불려짐 (IB)
override func tableView(_ tableView: UITableView) : 오버라이드된 함수를 통해 뷰의 디테일을 수정한다
viewController를 통해서 언제 어떤 화면이 나올지 조작하고,
storyboard라는 그래픽 UI를 이용해 뭘 띄울지 연결한다음에
세부 디테일은 viewController에서 func을 오버라이딩하여 조정한다.
뭔가 swiftUI에 비해 한단계 더 많은 일을 처리해야하는 느낌이다.
어떤 데이터를 불러올지 어떤 형식으로 부를지도 지정을 따로 해줘야 하고
preview대신 simulator를 써서 체크하며,
어떤 데이터가 가야하는지 코드가 아니라 GUI로 하는 것도 어차피 코드를 짜주긴 해야하는 것 같아서 SwiftUI가 훨씬 편하게 느껴진다.
다만 거대한 Controller라는 개념과 SceneDelegate 등 중간 단계에서 전체를 조망하는 구조가 있어서 전체를 한 눈에 보기는 편한 것 같다.