[SwiftUI Bootcamp] Intermediate9

Woozoo·2023년 1월 29일
0

[SwiftUI]

목록 보기
25/26

How to use: Typealias


무비 모델을 만들었다

그리고 무비모델이 바인딩된 변수도 선언해줌

근데 MoviewModel 이름을 바꾸고 싶을 수 있잖음


이렇게 TVModel로 바꿔주고 싶어졌다고 치면
MovieModel로 사용하던 것들은 코드를 수정해야함

그런 작업들을 줄여줄 수 있는게 typealias임!

typealias 원하는 이름 = 이름 바꾸고 싶은 타입
요렇게

How to use: @escaping


뷰모델이 있고


텍스트를 탭하게되면 뷰모델에서 데이터를 가져오는 걸 표현한다고 가정해보자

지금 같은 경우는 downloadData()의 내용이 차근차근 스탭에 맞춰서 실행되게됨 (synchronous)


비동기로 실행될 downloadData2 메소드를 만들어줌
인터넷에서 데이터를 다운로드 하는 상황을 표현해주기 위함임
이 때 함수의 선언부에 명시해준 반환타입 String이 원래라면
즉시 반환이 되야하지만 그렇지 않아서 지금처럼 에러가 발생하게 됨


클로져로 파라미터를 수정해줌
이 때 스트링 data를 받고, 반환 값은 없는 형태로 만들었음

downloadData2를 자동완성해보면 지금처럼 만들어지는 걸 볼 수 있음

엔터를 누르게되면 트레일링 클로져 형태로 바뀌게 되는데 이 스코프 내에서 text의 값을 returnedData가 되게 바꿔줌


-> Void를 반환 한다는 건

func doSomething(_ data: String) -> Void {
	//dosomething
}

func doSomething(_ data: String) -> () {
	//dosomething
}

func doSomething(_ data: String)  {
	//dosomething
}

이 3가지는 같은 뜻임!



이렇게 클로져형태로 만들어줘도 에러가 발생함
이럴 때 쓰는 게 @escaping임

escaping으로 만들어주면 명시적으로 self가 붙어야한다고 또 에러가 보이는데

클로져에 작성된 비동기 작업이 이렇게 되면 strong reference가 되버려서
작업이 끝나기 전까지 뷰모델 인스턴스가 할당이 해제가 안되게 되버림

그럴 때 사용하는 게 [weak self] 입니다!! 아까 했었죠


요렇게!


String으로 받던 파라미터를 이번엔 struct 형태로 받아보자
DownloadResult라는 struct를 만들어주고 프로퍼티로 data를 구성해줌



이렇게 되겠죠

이렇게 구조체 형태로 파라미터를 받게되면 좋은 점이 데이터의 항목들이 많아지게 되면
returnedResult.data 형태로 닷 을 사용해서 바로바로 접근이 가능함


여기에 typealias 까지 사용하면

홀리몰리 과카몰리
요렇게 메소드가 구현이 가능해집니다!!!!

profile
우주형

0개의 댓글