예시에서 설정된 나의 deployment target은 12.4
available을 사용하여 특정 Swift언너 버전 또는 특정 플랫폼 및 OS버전과 관련되 선언의 수명주기(lifecycle)를 나타낸다.
사용가능한 속성은 항상 쉼표로 구분된 attribute argument목록과 함께 나타난다.
이러한 argument는 하단의 플랫폼 또는 언어 중 하나로 시작한다.
- iOS
- iOSApplicationExtension
- macOS
- macOSApplicationExtension
- watchOS
- watchOSApplicationExtension
- tvOS
- tvOSApplicationEXtension
- swift
*(별표)를 사용하여 위에 나열 된 모든 플랫폼 이름에 대한 선언의 가용성(available)을 나타낼 수 있다.
하지만 swift버전 가용성을 지정하는 사용가능한 attribute는 *을 사용할 수 없다.
이렇게 오류가 난다.
나머지 argument는 순서에 관계없이 나타날 수 있으며, 중요한 milestones를 포함하여 선언의 수명주기에 대한 추가 정보를 지정할 수 있다.
unavailable은 지정된 플랫폼에서 선언을 사용할 수 없음을 나타낸다. 이 argument는 Swift버전 가용성을 지정할 때 사용할 수 없다.
Introduced는 선언이 도입 된 지정된 플랫폼 또는 언어의 첫번째 버전을 나타낸다
introdued: version number
버전번호는 1~3개의 양의 정수로 구성되며, 마침표로 구분된다.
deprecated는 선언이 사용되지 않는 지정된 플랫폼 또는 언어의 첫번째 버전을 나타낸다.
deprecated: version number
optional 버전 번호는 1~3개의 양의 정수로 구성되며 마침표로 구분된다.
버전 번호를 생략하면 해당 선언이 더이상 사용되지 않으므로 정보는 제공되지 않는다.
버전번호를 생략하면 콜론도 생략해라
이거는 deprecatedd에서만 가능한거인듯
obsoleted는 선언이 폐기된 지정된 플랫폼 또는 언어의 첫번째 버전을 나타낸다
지정된 플랫폼 또는 언어에서 제거되고 더 이상 사용할 수 없다.
obsoleted: version number
버전번호는 1~3개의 양의 정수로 구성되며 마침표로 구분된다
message는 사용되지 않거나 더 이상 사용되지 않는 선언을 사용하는 것에 대한 경고 또는 오류를 표시할 때 컴파일러가 표시하는 텍스트 메세지를 제공하는데 사용된다.
message는 사용되지 않거나 더 이상 사용되지 않는 선언을 사용하는 것에 대한 경고 또는 오류를 표시할 때 컴파일러가 표시하는 텍스트 메세지를 제공하는데 사용된다.
renamed는 이름이 바뀐 선언의 새 이름을 나타내는 텍스트 메세지를 제공하는데 사용
새로운 이름은 이름이 바뀐 선언의 사용에 관해 오류가 날 때 컴파일러에 의해 표시된다.
renamed: new name
새 이름은 문자열 리터럴로 구성된다.
#available
여러 플랫폼에서 서로 다른 논리 처리를 결정학 위해서 if 또는 guard문과 같이 사용된다.
즉 Bool을 반환하는 런타임 검사
주의할 점은 해당 버전을 포함하며 그 이상의 버전인지 확인하는 것
if #available(iOS 11.0, *) {
// ios11, 12 ... 이상
} else {
// iOS 11 하위 버전들
}
@available
함수(메서드), 클래스, 또는 프로토콜 앞에 놓는다. 타입 또는 프로토콜이 적용되는 플랫폼 및 OS를 나타낸다. 이것 deployment target과 관련된다. #available과 다르게 컴파일타임에 경고 또는 오류를 생성한다.
@available(iOS 12, *)
func istest() {...}
이렇게 되면 iOS12를 포함한 그 이상의 버전에서만 istest메서드를 호출할 수 있다.
만약 내 deployment target이 설정한 버전보다 낮으면 컴파일 에러가 난다.
때문에 이때는 if #available 블라블라
로 해줘야한다.
하나의 플랫폼에서만 체크하는 것이 아니라 여러 플랫폼도 가능하다@available(iOS 10.0, macOS 10.12, *)
위의 도입에 굵은 글씨로 나열한 것은 @available에서 사용가능한 것이다.
@available(*, unavailable)
func istest() {...}
- istests() 모든 플랫폼에서 사용할 수 없다는 뜻
@available(*, unavailable, message: "이 플랫폼에서는 사용할 수 없습니다.")
func is test() {...}
이런식으로(아래)
만약 tvOS에서 지정해주면 거기서는 사용할 수 없는 메서드인 것
introduced
아래로 보면 내가 만든 함수는 iOS13 버전 이상부터 쓸 수 있는 거임
(Introduced는 message를 쓸 수 없납)
deprecated
현재 deployment target 이상이면 경고가 뜬다
메세지도 추가할 수 있지만 renamed도 추가 가능하다.
특정 메서드, 클래스 등을 rename하는 거니까 띄어쓰기가 안됨
obsoleted
위의 deprecated는 경고였지만 obsoleted는 deployment target 이상이면 에러가 뜬다(에러가 뜨는 버전에 대한 정보를 말해주진 않음)
왜냐면 그 버전이상부터는 폐기한거니까
deprecated처럼 메세지를 넣어줄 수 있음 근데 정확한 버전은 말해주지 않네..
위처럼 다 써줄 수 있음.
🐡 허리가 점점 개복치가 돼간다
사실 내 사파리는 지금 메모리 생명주기, sentEvent, 오토레이아웃 등 많은게 있는데
다 읽긴해도 언제 다 정리해서 이해하고 그러냐
오늘 8시간 앉아있었는데 승모근이 아프다 버티컬마우스를 사라는 계시인듯하다.
'🌱' 카테고리의 다른 글
Ing, ed (0) | 2022.07.14 |
---|---|
[iOS] Storyboard Reference (0) | 2022.07.13 |
UIWindow (0) | 2022.07.10 |
앱의 생명주기/ Scene (0) | 2022.07.07 |
Image View를 랜덤하게 바꾸기 (0) | 2022.07.05 |