Pytanie "NSLog" jest niedostępny: funkcja Variadic jest niedostępna w swift


Jestem nowy w szybkim tempie. kiedy uczę się tylko podstaw, dostałem ten błąd NSLog

Oto mój kod:

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.
    }


}

Jeśli deklaruję myString lubię to

var myString: NSString!

Można go używać NSLog i mogę też zobaczyć konsolę.

Ale deklarowanie takiego łańcucha powoduje problem

 var myString: NSString?

Odzwierciedla przy NSLog i pokazuje błąd.

Jaki jest tego problem?


21
2017-10-03 08:14


pochodzenie




Odpowiedzi:


Jeśli zadeklarujesz var myString: NSString? jako opcjonalne, musisz upewnić się, że ma wartość przed przekazaniem jej do NSLog.

Więc możesz to zrobić w ten sposób NSLog("%@" , myString!). Gdyby myString jest zero i ty wkładasz ! program się zawiesi i dostaniesz

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

Ale jeśli ma wartość, program będzie działał normalnie i będzie drukowany

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

napisałem myString = "Test".


18
2017-10-03 08:27



Lepiej używać NSLog("%@", myString ?? "<nil>") pewno? - Grimxn
To absolutnie alternatywa @Grimxn - Rashwan L


NSLog() nie można wydrukować opcji Swift.

let optional: String?
NSLog("%@", optional) // 'NSLog' is unavailable: Variadic function is unavailable

let nonOptional: String
NSLog("%@", nonOptional) // Ok!

NSLog("%@", optional ?? "value-if-nil") // Ok!

Napraw, przekazując wartość nie-opcjonalną do NSLog() zamiast.


9
2018-01-15 22:20