Sunday 29 March 2015

Swift: Debugging Techniques


There are mainly two functions available for printing the textual representation of objects and variables they are print( ) and println( ).

println( ) writes a newline character to the standard output.

Other functions available are debugPrintln() and debugPrint().

Examples of some functions are given below which can be used for advanced debugging.

println("Hello World!")


console output

Hello World!



var temp: String = "Test String"
println(temp)
debugPrintln(temp)


console output

Test String
"Test String"


For Customizing an object's textual representation we can override the methods debugDescription( )  or description( )


class ClassA: NSObject {
    var name: String = "unknown"
    
    override  var description: String {
        return "ClassA: \(name)"
    }
}

var tempA: ClassA = ClassA()
print(tempA.description)
println(tempA)


console output

ClassA: unknown
ClassA: unknown


Use toDebugString( ) and toString( ) which will returns the result of debugPrint and print into a string.


var str: String = toString(tempA)
println(str)


console output

ClassA: unknown


Use of precondition( ) and preconditionFailure( )

var value: String = ""
        
if value.lengthOfBytesUsingEncoding(NSUTF8StringEncoding) == 0 {
    preconditionFailure("value is empty")
}


console output

fatal error: value is empty: file /Users/cramesh/Documents/My_Works/SwiftTutorial/SwiftTutorial/AppDelegate.swift, line 37

To identify an object we can use unsafeAddressOf( )

println(unsafeAddressOf(value))


console output

0x00007f8df251e480


Printing the class name and method name can be done as given below.


var className = NSStringFromClass(self.classForCoder)
println(className)

var methodName = NSStringFromSelector(__FUNCTION__) 
println(methodName)

or 

println(__FUNCTION__)