멤버를 수동으로 폐기하는 방법


168

Objective-C와 달리 Swift에는 전처리 기가 없으므로 클래스 멤버를 수동으로 더 이상 사용하지 않을 방법이 있습니까?

나는 이것과 비슷한 것을 찾고있다 :

-(id)method __deprecated;

답변:


266

다음과 같이 Available 태그를 사용할 수 있습니다.

@available(*, deprecated)
func myFunc() { 
    // ...
}

여기서 *는 플랫폼입니다 (iOS, iOSApplicationExtension, macOS, watchOS, tvOS, * 등).

또한 그것이있는 플랫폼의 버전을 지정할 수 있습니다 introduced, deprecated, obsoleted, renamed,과를 message:

@available(iOS, deprecated:6.0)
func myFunc() { 
    // calling this function is deprecated on iOS6+
}

Or

@available(iOS, deprecated: 6.0, obsoleted: 7.0, message: "Because !")
func myFunc() {
    // deprecated from iOS6, and obsoleted after iOS7, the message "Because !" is displayed in XCode warnings
}

프로젝트가 여러 플랫폼을 대상으로하는 경우 다음과 같이 여러 태그를 사용할 수 있습니다.

@available(tvOS, deprecated:9.0.1)
@available(iOS, deprecated:9.1)
@available(macOS, unavailable, message: "Unavailable on macOS")
func myFunc() {
    // ...
}

Swift 문서 에 자세한 내용이 있습니다 .


Swift 3에서는 =s가 s로 바뀝니다 :.
Sam Soffes

2
*, deprecated: 10.0그것을 지양 iOS 10, tvOS 10등, 우리가 결합해서는 안 추측 *버전 번호와 함께? 더 잘하는 방법에 대한 아이디어가 있습니까?
fabb

@fabb이 응용 프로그램의 버전이 아닌 아이폰 OS입니다
악셀 Guilmin

1
사실이 아닙니다. 문서에서 연결 : "지정된 플랫폼의 버전"
fabb

1
정확히, 내 원래의 요점으로 돌아와서 : @available(*, deprecated: 10.0)따라서 코드가 iOS에서만 실행되는 것이 아니라면 아주 나쁜 생각입니다
fabb

70

Swift 3Swift 4를 시작 하면 버전 번호는 선택 사항입니다. 이제 다음을 간단히 입력 할 수 있습니다.

@available(*, deprecated)
func foo() {
    // ...
}

또는 메시지를 원할 경우 다음을 수행하십시오.

@available(*, deprecated, message: "no longer available ...")
func foo() {
    // ...
}

1
Swift 2.3의 경우 버전 번호도 선택 사항입니다.
DawnSong

3
Swift 2.3의 @available(*, deprecated, message = "no longer available ...")경우 메시지를 포함 할 때 구문이 나타납니다.
Daniel Zhang

@Daniel, Apple이 나머지 부분이 아닌 부분을 변경하여 2.3이라고 부르는 것이 이상합니다. 서명, 답변을 다시 업데이트하겠습니다. 메모 해 주셔서 감사합니다!
Yuchen Zhong

6

이 기능을 사용하여 새 기능으로 항목을 자동 수정합니다.

@available(*, deprecated, renamed: "myNewFunc")
func myOldFunc() {
   // ...
}

func myNewFunc() {
   // ...
}

* 대신 신속한 버전 번호로 swift를 사용할 수 있습니다.

더 이상 사용되지 않는 함수는 경고를 생성하지만 여전히 호출 할 수 있습니다. (경고)

사용되지 않는 함수는 완전히 호출되지 않습니다. (오류)

@available(swift, deprecated: 4.0, obsoleted: 4.2, message: "This will be removed in v4.2, please migrate to ...")

또는 iOS, macOS, watchOS, tvOS와 같은 다른 옵션을 사용하십시오 ...


1
@available(iOS, deprecated:7.0, obsoleted: <ObsoletedVersion>, renamed: "myFuncNew", message: "Please use new method - myFuncNew()")
func myFuncOld() {
    //
}

경우 deployment target입니다 9.0

1. <ObsoletedVersion>== 10.0-warning

여기에 이미지 설명을 입력하십시오

2. <ObsoletedVersion>== 8.0-compile error

여기에 이미지 설명을 입력하십시오


"폐기"옵션 인 경우 사용할 수 없습니다. 이에 따라 옵션이 구현되지 않습니다. bugs.swift.org/browse/SR-8168
mkjwa
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.