Swift มี #warning ที่เทียบเท่าหรือไม่ มันใช้เพื่อแสดงคำเตือนใน GUI ของ Xcode
ฉันสนใจด้วยว่ามี #error เทียบเท่า
Apple ได้กล่าวว่าเครื่องหมาย #pragma ในไม่ช้ามันอาจเป็นเช่นเดียวกันกับเรื่องนี้
Swift มี #warning ที่เทียบเท่าหรือไม่ มันใช้เพื่อแสดงคำเตือนใน GUI ของ Xcode
ฉันสนใจด้วยว่ามี #error เทียบเท่า
Apple ได้กล่าวว่าเครื่องหมาย #pragma ในไม่ช้ามันอาจเป็นเช่นเดียวกันกับเรื่องนี้
คำตอบ:
ในอนาคตแอปเปิ้ล devs อาจปล่อย//WARNING:
แลนด์มาร์กหรือให้ฟังก์ชั่นการทำงานสำหรับแลนด์มาร์คที่มีชื่ออื่น
หากต้องการประกาศใช้ฟังก์ชันนี้กับ Swift ใน Xcode วันนี้คุณสามารถทำสิ่งต่อไปนี้ตามที่อธิบายโดย 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:"
ในโค้ดข้างต้นซึ่งจะทำให้การทำงานเริ่มต้นสำหรับสิ่งที่ต้องทำและ FIXME และจะยกคำเตือนรวบรวมเวลาในการแสดงความคิดเห็นใด ๆ // 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
หรือคุณสามารถใช้ "Release" แทน "Debug" เพื่อกำหนดเป้าหมายการสร้างการผลิตเท่านั้น
-type f
ตัวเลือกในfind
คำสั่งเพื่อแยกไดเรกทอรีออกจากผลลัพธ์การค้นหา นี่ไม่ควรเป็นปัญหาสำหรับคนส่วนใหญ่ แต่ทุกคนที่ใช้R.swift
พ็อดจะพบข้อผิดพลาดเดียวกันกับที่ฉันมีเพราะR.swift
เป็นได
แก้ไข
ตั้งแต่ 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
เป็นตัวอย่างบางส่วน
รวดเร็วไม่มีการตั้งค่ารัดกุมและอีโมติคอนสามารถเพิ่มอารมณ์ขัน / บุคลิกภาพในรหัสของคุณ บางครั้งทางออกที่ง่ายที่สุดคือทางออกที่ดีที่สุด
let fixMeMakeMeNonOptional: Int
ให้คุณ Immutable value fixMeMakeMeNonOptional was never used; consider replacing with _ or removing it
ในตัวแก้ไขปัญหา โซลูชันอื่นทั้งหมดให้ข้อความแสดงข้อผิดพลาดทั่วไปมากขึ้น
เริ่มต้นด้วย 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
ถ้าคุณต้องการสร้างงานของคุณล้มเหลว
ในสวิฟท์ใช้ XCode 6 คุณสามารถใช้ที่แตกต่างกันชนิดของสถานที่สำคัญสำหรับวัตถุประสงค์ที่ต่างกัน นี่คือสิ่งที่ Apple พูดเกี่ยวกับ:
ตอนนี้ Xcode สนับสนุน // MARK :, // สิ่งที่ต้องทำ: และ // FIXME: จุดสังเกตเพื่อใส่คำอธิบายประกอบรหัสของคุณและแสดงไว้ในแถบกระโดด
ดังนั้นสำหรับการตั้งคำเตือนพร้อมคำอธิบายคุณจะใช้สิ่งนี้:
//TODO: Clean up this code after testing
หากคุณต้องการตั้งเครื่องหมายสั้น ๆ (สมมติว่าคุณจะจดจำสิ่งที่ต้องทำ) ให้ใช้สิ่งนี้:
//FIXME
แก้ไข: สถานที่สำคัญเหล่านี้จะปรากฏเฉพาะในแถบกระโดดของ XCode ซึ่งอาจไม่ใช่สิ่งที่คุณต้องการและสิ่งที่คาดหวัง - โดยเฉพาะจากเครื่องหมาย // TODO: และ // FIXME ฉันได้ยื่นเรดาร์เกี่ยวกับเรื่องนั้น: # 17776817 หวังว่า Apple จะเพิ่มสิ่งนี้ใน build ที่กำลังจะมาใน XCode 6
แนวทางแก้ไข (แก้ไข 2):
หากคุณติดตั้ง Swift Linter ผ่าน Homebrew (เรียกใช้งานbrew install swiftlint
หลังจากbrew update
) และเพิ่มสคริปต์บิลด์ที่แนะนำให้กับโครงการของคุณคุณจะเห็นสัญลักษณ์สถานที่TODO
และFIXME
สัญลักษณ์ทั้งหมดปรากฏขึ้นภายใน Xcode SwiftLint จะเพิ่มคำเตือน / ข้อผิดพลาดเพิ่มเติมที่คุณสามารถกำหนดค่าให้เหมาะกับความต้องการของคุณได้ - ฉันสามารถแนะนำให้ใช้ SwiftLint เท่านั้นและจะแก้ปัญหานี้ได้อย่างยอดเยี่ยม!
ยังไม่ได้เพิ่มโดยทีมงาน Apple สิ่งที่ฉันตัดสินใจที่จะทำคือการโกง แต่อย่างน้อยมันก็แสดงข้อความ FIXME ให้ฉันดู ดังนั้นสิ่งที่ฉันทำคือประกาศฟังก์ชัน FIXME () ในไฟล์ Swift:
@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
}
สำหรับ Swift 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/"
egrep --directories='skip'
เพื่อไม่สนใจไดเรกทอรีที่มีชื่อเช่นDevice.swift
อีกทางเลือกหนึ่งถ้าคุณต้องการให้บางสิ่งปรากฏขึ้นในแผงคำเตือนคุณสามารถเขียนสิ่งต่อไปนี้
if (false){
var x = 2;
}
คุณไม่สามารถรับข้อความใด ๆ ให้แสดงได้ แต่อย่างน้อยมันก็เป็นเครื่องหมายที่มองเห็นได้ชัดเจนกว่าโดยเฉพาะถ้าคุณมักจะปฏิบัติกับคำเตือน (ส่วนใหญ่) เช่นข้อผิดพลาด
หนึ่ง CocoaPod ที่ฉันใช้อยู่นั้นมี.swift
ชื่ออยู่ในนั้นดังนั้นไดเรกทอรีจึงถูกส่งกลับซึ่งทำให้ Kyle เกิดข้อผิดพลาด เพิ่ม-type f
ไปที่find
การแก้ไขคำสั่งว่าปัญหาโดยเฉพาะการมองหาที่ไฟล์ที่ตรงกับ*.swift
แทนของไดเรกทอรียังกลับมาที่ตรงกับรูปแบบ
รหัสสุดท้ายที่ฉันใช้:
TAGS="TODO:|FIXME:"
echo "searching ${SRCROOT} for ${TAGS}"
find "${SRCROOT}" \( -name "*.swift" \) -type f -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"
หากคุณไม่เต็มใจที่จะปรับการตั้งค่าการสร้างของคุณวิธีแก้ไขง่ายๆที่บ้านอีกอย่างหนึ่งก็คือการติดตัวยึดตำแหน่งตัวแก้ไขหน้าความคิดเห็น:
<#todo#>// stop and fixme!
คุณได้รับข้อผิดพลาด“ ตัวยึดตำแหน่งตัวแก้ไขในไฟล์ต้นฉบับ” เมื่อคุณสร้าง แต่ไม่เหมือนกับวิธีแก้ปัญหาของ Jordan ไม่มีข้อผิดพลาดที่จะรบกวนคุณขณะพิมพ์:
หลังจากค้นหาและโหยหามานานมากฉันเชื่อว่าไม่มีเอนทิตีดังกล่าวอยู่ ฉันยังหวังว่าจะมีบันทึกย่อรุ่นล่าสุดของ Xcode ที่กล่าวถึงการขาดกลไก #pragma อย่างต่อเนื่อง #warning และ #error ก็อาจจะมาด้วยเช่นกัน
นอกจากนี้ฉันขอแนะนำให้ยื่น Radar กับ Apple ที่bugreport.apple.comเพื่อเพิ่มฟังก์ชั่นนี้ (คุณสามารถหลอก 17702491)
เราเขียนเครื่องมือที่สามารถกำหนดค่าได้ซึ่งให้คุณใส่คำเตือนและข้อผิดพลาดใน Xcode Issue Navigator ตามแท็กความคิดเห็นและการกำหนดค่าโครงสร้าง https://github.com/doubleencore/XcodeIssueGenerator
ติดตั้ง:
brew tap doubleencore/tap
brew install xcodeissuegenerator
จากนั้นใส่บรรทัดใน Run Script Build Phase:
# Mark WARNINGs, SERIOUSs, and TODOs as warnings in DEBUG builds excluding the Vendor and Third Party directories.
XcodeIssueGenerator -b DEBUG -w "WARNING, SERIOUS, TODO" -x "Vendor/, Third Party/"
นี่คือบทความที่อธิบายวิธีที่เราใช้
ฉันอาจมาสายกับปาร์ตี้ด้วย Xcode 10 ที่รองรับข้อผิดพลาดและคำเตือน แต่เพียงแค่ใส่สตริง:
"Need to finish implementing this"
จะสร้างคำเตือน: String literal is unused
ด้วยการเติมข้อความอัตโนมัติยังคงทำงานและโครงการยังคงรวบรวม
คำตอบของฉันไม่ได้ตอบสนองค่อนข้างคำถามของคุณ แต่ถ้าคุณต้องการสิ่งที่ง่ายคุณสามารถใช้นี้ปลั๊กอินของAlcatrazที่ทำงานในทุกโครงการโดยไม่ต้องเตรียมการใด ๆ เพิ่มเติม เพียงทำต่อไปนี้:
1) install Alcatraz (Nice package manager for Xcode Plug-ins) by entering this line in terminal:
curl -fsSL https://raw.githubusercontent.com/supermarin/Alcatraz/deploy/Scripts/install.sh | sh
2) Then restart Xcode and on it launch agree to install all bundles not included in Xcode
3) In Xcode select menu item -> Window -> Package manager -> type in search panel XTodo and press install
4) Relaunch Xcode and again agree to install additional bundles
5) From now press Ctrl + T and you will see all Tags in nice window
นอกจากนี้ยังมีการตั้งค่าสำหรับการเพิ่มแท็กใหม่
ข้อดีของตัวอย่างนี้ - มันไม่แสดงคำเตือนจากพ็อด:
if [ "${CONFIGURATION}" = "DEBUG" ]; then
TAGS="TODO:|FIXME:|WARNING:|warning:" find "." \( -name "*.swift" \) -not -path "./Pods/*" -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).*\$" | perl -p -e "s/($TAGS)/ warning: \$1/"
fi
ติดตั้งอย่างไร:
//WARNING
เหมือนกับ #pragma//MARK
แต่ตอนนี้ไม่ได้เพิ่ม XCode รุ่นใดลงไป