Search code examples
iosswiftnslog

'NSLog' is unavailable: Variadic function is unavailable in swift


I'm new to swift. when I'm learning just basics I got this error at NSLog

Here is my code :

import UIKit

class ViewController: UIViewController {
    
     var myString: NSString?

    override func viewDidLoad() {
        super.viewDidLoad()
        myString = "himanth"
        print(myString)
        NSLog("%@" , myString)
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

If I am declaring myString like this

var myString: NSString!

It's fine to use NSLog and I can able to see console as well.

But declaring string like this causing problem

var myString: NSString?

It reflects at NSLog and showing error.

What is the problem with that?


Solution

  • If you declare var myString: NSString? as an optional then you need to make sure it has a value before you pass it to the NSLog.

    So you could do it like this then NSLog("%@" , myString!). If myString is nil and you put ! the program will crash and you will get

    fatal error: unexpectedly found nil while unwrapping an Optional value.
    

    But if it has a value the program will continue as normal and print out

    2016-10-03 10:26:25.077 Swift3.0[65214:1579363] Test
    

    I wrote myString = "Test".

    Another example as @Grimxn mentioned is the coalescing operator.

    NSLog("%@", myString ?? "<nil>")