Swift 2.1 and earlier used the "screaming snake case" symbols __FILE__
, __LINE__
, __COLUMN__
, and __FUNCTION__
, which automatically get replaced the compiler by the filename, line number, column number and function name where they appear.
From Swift 2.2, those old symbols have been replaced with #file
, #line
, #column
and #function
, which will be familiar to you if you've already used Swift 2.0's #available to check for iOS features. As the official Swift review says, it also introduced "a convention where # means invoke compiler substitution logic here."
Here’s how the debug identifiers in action from Swift 2.2 and later:
func printGreeting(name: String, repeat repeatCount: Int) {
print("This is on line \(#line) of \(#function)")
let upperName = name.uppercaseString
for _ in 0 ..< repeatCount {
print(upperName)
}
}
printGreeting("Taylor", repeat: 5)
SPONSORED Still waiting on your CI build? Speed it up ~3x with Blaze - change one line, pay less, keep your existing GitHub workflows. First 25 HWS readers to use code HACKING at checkout get 50% off the first year. Try it now for free!
Sponsor Hacking with Swift and reach the world's largest Swift community!
Download all Swift 2.2 changes as a playground Link to Swift 2.2 changes
Link copied to your pasteboard.