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

Himanth picture Himanth · Oct 3, 2016 · Viewed 15.2k times · Source

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 ssetup 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?

Answer

Rashwan L picture Rashwan L · Oct 3, 2016

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>")