[swift] 스위프트 : #warning equivalent

Swift에 #warning에 해당하는 것이 있습니까? Xcode 자체 GUI에 경고를 표시하는 데 사용됩니다.

또한 #error equivalent이 있는지에 관심이 있습니다.

애플은 #pragma 마크가 곧 나올 것이라고 말했다.

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



답변

앞으로 Apple 개발자는 //WARNING:랜드 마크를 잘 출시 하거나 다른 랜드 마크에 대한 기능을 제공 할 수 있습니다.

그러나 오늘 Xcode에서 Swift를 사용하여이 기능을 사용하려면 Ben Dodson & Jeffrey Sambells가 설명한대로 다음을 수행 할 수 있습니다.

대상의 빌드 단계 탭 (프로젝트 설정> 빌드 단계> ‘+’> 새 실행 스크립트 단계)에 새 실행 스크립트를 추가하고 빈 상자에 다음 코드를 붙여 넣으십시오.

TAGS="TODO:|FIXME:"
echo "searching ${SRCROOT} for ${TAGS}"
find "${SRCROOT}" \( -name "*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"

그러면 Xcode가 컴파일 타임에 마크 업 // TODO:또는 // FIXME:주석에 대해 경고 를 표시합니다.

또는 TAGS="WARNING:"위의 코드에서 TODO & FIXME의 기본 동작을 유지하고로 표시된 주석에 대해 컴파일 시간 경고를 발생 시키는 사용자 정의 태그를 사용하여 TAGS를 수정할 수 있습니다 // WARNING:.

http://bendodson.com/weblog/2014/10/02/showing-todo-as-warning-in-swift-xcode-project/
http://jeffreysambells.com/2013/01/31/generate-xcode- 경고부터 시작하기까지

편집 : 18/11/14

@ david-h는 그의 의견에서 좋은 지적을했습니다. 특정 빌드 구성에서만 이러한 경고를 발생 시키려면 다음을 수행하십시오.

if [ "${CONFIGURATION}" = "Debug" ]; then
TAGS="TODO:|FIXME:"
echo "searching ${SRCROOT} for ${TAGS}"
find "${SRCROOT}" \( -name "*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"
fi

또는 “Debug”대신 “Release”를 사용하여 프로덕션 빌드 만 대상으로 지정할 수 있습니다.


답변

편집하다

Swift 4.2부터는 언어 경고가 빌드 경고 및 오류에 모두 지원됩니다.

#warning("Warning description")
#error("Throws a build error")

원래 답변

빠르고, 더럽고, 너무 우아하면서도 간단합니다.

// Description of what you need to fix

var FIX_ME__???: AnyObject

‘FIX_ME__???’가 사용되지 않았다는 경고가 발생합니다.

원하는 경우 변수 이름에 이모티콘을 추가 할 수 있습니다. 나는 종종 ?와 ?을 사용합니다. 당신은 대체 할 수 있습니다 FIX_ME__당신이 원하는대로로 : ALGORITHM_NEEDS_REVIEW, BugID_148, 또는 JOHNNY_YOU_BROKE_THIS몇 가지 예입니다.

빠르고, 설정이없고, 간결하며 이모티콘으로 코드에 유머 / 인격을 추가 할 수도 있습니다. 때로는 가장 간단한 솔루션이 최상의 솔루션입니다.


답변

WWDC 2018 업데이트 이후

Xcode 10 및 Swift 4.2부터는 다음과 #warning같이 다시 사용할 수 있습니다 .

#warning("TODO: Clean up this code after testing")

이것은 예상대로 Xcode에서 경고로 표시됩니다!

이것은 #if체크 와 조합하여도 작동 합니다. 예를 들어 다음은 대상 플랫폼이 iOS 인 경우에만 경고를 표시합니다.

#if os(iOS)
    #warning("this code is untested in iOS")
#endif

도 있습니다 #error당신이 당신의 빌드가 실패 할 경우.


사전 WWDC 2018 답변

XCode 6을 사용하는 Swift에서는 다음을 사용할 수 있습니다. 다른 목적으로 다른 종류의 랜드 마크를 . Apple이 이에 대해 말한 내용은 다음과 같습니다.

Xcode는 이제 // MARK :, // TODO : 및 // FIXME를 지원합니다. 랜드 마크 를 지원하여 코드에 주석을 달고 점프 막대에 나열합니다.

설명과 함께 경고를 설정하려면 다음과 같이 사용하십시오.

//TODO: Clean up this code after testing

짧은 마크를 설정하려면 (무엇을해야하는지 기억한다고 가정) 다음을 사용하십시오.

//FIXME

편집하다:
그러나이 랜드 마크는 XCode의 점프 막대에만 나타나며, 이는 원하는 // TODO : 및 // FIXME 마크에서 기대하지 않을 수도 있습니다. # 17776817에 레이더를 제출했습니다. Apple이 XCode 6의 다음 빌드에 이것을 추가하기를 바랍니다.

솔루션 (EDIT 2) :
당신이 브루 통해 스위프트 린터를 설치하는 경우 (실행 brew install swiftlintbrew update) 및 추가 제안 된 빌드 스크립트를 다음의 모든 볼, 프로젝트에 TODOFIXME랜드 마크 엑스 코드 내에서 경고로 나타납니다. SwiftLint는 필요에 맞게 구성 할 수있는 경고 / 오류를 더 추가 할 것입니다. SwiftLint 만 사용하는 것이 좋으며이 문제를 효과적으로 해결합니다!


답변

아직 Apple 팀에서 추가하지 않았습니다. 내가하기로 결정한 것은 아마도 부정 행위이지만 적어도 FIXME 메시지를 보여줍니다. 그래서 내가하는 일은 Swift 파일에 FIXME () 함수를 선언하는 것입니다.

@availability(iOS, deprecated=1.0, message="I'm not deprecated, please ***FIXME**")
func FIXME()
{
}

다른 함수에서 호출하면 경고가 표시됩니다.

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
    FIXME()     // Incomplete method implementation.
    return 0
}

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

스위프트 2 사용

@available(iOS, deprecated=1.0, message="I'm not deprecated, please ***FIXME**")


답변

기사를보십시오 .

모든 태그를 강조 표시하는 고유 한 스크립트를 작성할 수 있습니다.

TAGS="TODO:|FIXME:"
ERRORTAG="ERROR:"
find "${SRCROOT}" \( -name "*.h" -or -name "*.m" -or -name "*.swift" \) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$|($ERRORTAG).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/" | perl -p -e "s/($ERRORTAG)/ error: \$1/"

결과는 다음과 같습니다.
여기에 이미지 설명을 입력하십시오


답변

대안으로, 경고 패널에 무언가를 표시하려면 다음과 같이 작성할 수 있습니다.

if (false){
   var x = 2;
}

실제로 텍스트를 표시 할 수는 없지만, 특히 오류와 같은 (대부분의) 경고를 처리하려는 경우 더 눈에 잘 띄는 마커입니다.


답변

나는 제안구현 이 기능을, 그리고 스위프트 4.2와 함께 제공됩니다. swift.org 에서 master툴체인을 다운로드하여 지금 사용할 수 있습니다 .

#if os(macOS)
  #error("macOS is not supported")
#endif
#warning("finish this")