강의를 듣다가 estimateHeight인가? tableView cell의 높이를 적용할때 자동으로 높이를 지정할수있는 기능에대해서 알아봤는데 이번에는 Resistance라는 기능이 있길래 알아보려한다
기본적으로 resistance는 storyboard로 autolayout을 잡을때 사용한다
예를들어서 이런 Cell을 xib로 만들었을때 SongName, artist name, album name, release date, save date와 아래 updatebutton의 크기는 동일하지만 comment는 여러줄이 될수 있고 이걸 제한하자니 comment가 중간에 끊겨서 ...으로 보이면 사용자에게 조금 불편할수있기때문에 comment의 높이를 반응형으로 만들수있는 방법이 있다
기본값은 vertical horizontal모두 750으로 되어있는데 이 숫자를 높여주면(1만 높여줘도 괜찮음)
나머지와 요소와 비교해서 가장 높은 값을 가진 요소를 우선적으로 생각한다
Compression Resistance는 resistance == 저항하다 == 바깥으로 늘어나다라고 생각하면 편하다
상대적으로 커지려고 하는 세기다. 즉, 여기서 빈여백이 존재한다면 comment를 우선적으로 크게 만들겠다는 의미가 된다
Hugging도 있는데 허깅 == 감싸다 == 안으로 줄어들다라고 생각하면 편하다. 상대적으로 작아지려고 하는 세기라 resistance의 반대라고 생각하면 된다
좀더 자세한 설명은 https://nsios.tistory.com/98 여기서 보면 좋을거같다
generic은 기본적으로 확장성을 위해서 사용하는 문법이다
let request = NSFetchRequest<NSFetchRequestResult>(entityName: self.modelName)
코어데이터 관련해서 데이터를 읽는 함수를 봤는데 위와같은 코드에서 <>안에 저게 왜들어가는거지를 모르겠어서 알게된 구조체나 클래스에서의 제네릭에 대해서 적어보려한다
NSFetchRequest의 설명을 한번 보면
open class NSFetchRequest<ResultType> : NSPersistentStoreRequest, NSCoding, NSCopying where ResultType : NSFetchRequestResult {
이렇게 되어있다 보통 제네릭관련해서 구글링을하면 함수를 만들때 제네릭을 사용하는 방법에대해 나오는데 구조체나 함수에서 제네릭을 사용하기위해서는 함수이름 옆에 <타입파라미터>를 넣어준다 그리고 이 함수를 사용할때 어떤 타입을가지고 사용할지를 넣어줘야한다고 한다
즉 NSFetchRequest함수는이라는 타입을 내가 사용할때 명시를 해줘야한다는것이다
그래서 함수를 사용할때 NSFetchRequestResult타입을 사용하겠다고 명시를 한 코드라고 생각하면된다
앱을 만들다보면 앱이 꺼지더라도 데이터가 저장되었으면 좋겠지만 백엔드관련해서 아무것도 모를때 localDB를 사용하라고 한다 그래서 보통 사용하는것들이 coredata나 realm, userdefault인데 유저디폴트는 생략하고 realm은 편하지만 퍼스트파티가 아니다. coredata는 애플에서 제공하는 퍼스트파티라서 한번 사용해보려고한다.
우선 프로젝트를 생성할때 use coredata인가를 체크해주고 프로젝트를 만들어야한다 그리고 나서
저렇게 coredata파일이 만들어져있는데 거기서 add Entitiy를 눌러서 field를 생성해준뒤
이렇게 구조체를 선언하듯이 이렇게 각각 저장할 요소들을 선언해주면된다 그리고나서 중요한건
codegen을 Manual/None으로 해주고
editor에서 create NSManagedObject Subclass...를 눌러준다 그러면
이런파일들이 만들어지는데 그러면 coreData를 사용할준비가 끝난다