UserDefaults로 구조체 저장 구조체를 UserDefaults에 저장하기 위해서는 인코딩, 디코딩 필요 -> 해당 구조체가 Codable을 채택해야함. 다시말해, 구조체 데이터를 인코더를 통해 인코딩한 값을 UserDefaults에 저장하고, 디코더를 이용해서 디코딩을 한 구조체 데이터를 불러오는 방식으로 진행됨. 인코딩 let encoder = JSONEncoder() if let encoded = try? encoder.encode(tamagotchiData) { UserDefaults.standard.setValue(encoded, forKey: "person") print(encoded) } 디코딩 // 디코딩해서 데이터가져오기 if let savedData = UserDefaults.st..
데이터 전달 세 가지 단계를 거침 1. 전환되는 화면에 정보를 받을 공간인 프로퍼티를 만들어야함. 근데 꼭 프로퍼티를 한 번 거쳐서 데이터를 전달해야되는 의문이 듦 -> Outlet에 바로 데이터를 넣게되면 인스턴스가 만들어지기 전에 데이터를 넣는 느낌이라 불가능. 2. 이전화면에서 만든 인스턴스를 통해 1번에서 만들어놓은 프로퍼티에 접근해서 값을 저장 vc가 가리키는 뷰컨트롤러 내에서 1번에서 얘기한 프로퍼티를 vc.movieData로 접근하는 것. 3. 데이터와 화면은 별개이므로, 받은 데이터를 뷰에 표시해주는 과정을 진행해야함 1번에서 만든 프로퍼티에 2번 과정에서 데이터를 받았으므로 viewDidLoad내에서 뷰에 표시해줌. 앱 첫 시작 화면 SceneDelegate의 scene메서드에서 작성. ..
코드로 화면 전환(Present) 세 단계로 나눌 수 있음.(스토리보드를 사용하는 경우) 1. 스토리보드를 특정 let sb = UIStoryboard(name: "StoryboardName", bundle: nil) name에 스토리보드의 이름을 넣어주면됨. 2. 해당 스토리보드 내의 뷰컨트롤러중 전환하고 싶은 뷰컨트롤러 특정 let vc = sb.instantiateViewController(withIdentifier: "identifier") 해당 뷰컨트롤러의 Identity Inspector에서 Storyboard ID를 설정하고 이 값을 withIdentifier에 넣어줌. 타입 캐스팅까지 하고 옵셔널까지 처리해준다면 아래처럼 적을 수 있음. guard let vc = sb.instantiate..
오픈소스 Kingfisher에서는 이미지 url을 이용해 이미지를 처리한다. 근데 주소가 https로 시작하는 이미지는 제대로 처리했지만, http로 시작하는 이미지는 처리하지 못했다. http로 시작하는 이미지 url을 이용했을때, 시뮬레이터를 보면 어떠한 이미지도 보이지 않는 것을 확인할 수 있다. 반면, https로 시작하는 이미지 url을 넣어주면 제대로 이미지가 보인다. 위의 결과처럼 http로 시작하는 url을 처리하지 못하는 이유는 ATS(App Transport Security)때문이다. 공식문서에 나온 내용을 보자. "On Apple platforms, a networking security feature called App Transport Security (ATS) improves p..
UICollectionViewController 테이블뷰와 비슷하지만 훨씬 더 자유로움. 테이블뷰에서는 셀을 Row라고 했지만 컬렉션뷰에서는 Item이라고함. 컬렉션뷰에서는 heightForRowAt이 없음. -> CollectionViewFlowLayout()을 사용하기 때문 스토리보드에서 셀의 크기를 키우면 가운데로 옮겨짐 -> 셀이 너무 커지면 한 개 이상 들어갈 수 없으므로 자동으로 가운데로 옮겨지는 것. 컬렉션뷰의 사이즈 인스펙터에서 Estimate Size를 None으로 바꿔줘야 스토리보드에서 정한 크기나 코드에서 작성한 크기가 적용됨. 테이블뷰는 셀과 셀 사이를 띄울 수 없지만 컬렉션뷰는 가능함. UICollectionViewFlowLayout 컬렉션뷰 레이아웃의 한 타입. -> 공식문서에 ..
- Total
- Today
- Yesterday