web-dev-qa-db-fra.com

'NSLog' n'est pas disponible: la fonction Variadic n'est pas disponible dans swift

Je suis nouveau à Swift. quand j'apprends juste les bases, j'ai eu cette erreur à NSLog

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


}

Si je déclare myString comme ceci

var myString: NSString!

C'est bien d'utiliser NSLog et je peux aussi voir la console.

Mais déclarer une chaîne comme ceci pose problème

var myString: NSString?

Il reflète à NSLog et montre une erreur.

Quel est le problème avec ça?

22
Himanth

Si vous déclarez var myString: NSString? en tant qu'option, vous devez vous assurer qu'il a une valeur avant de la transmettre à NSLog.

Donc, vous pouvez le faire comme ceci alors NSLog("%@" , myString!). Si myString est nul et que vous mettez !, le programme se bloquera et vous obtiendrez

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

Mais s'il a une valeur, le programme continue normalement et affiche 

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

J'ai écrit myString = "Test".

18
Rashwan L

NSLog() ne peut pas imprimer Swift Optionals.

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

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

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

Corrigez en passant une valeur non facultative à NSLog() à la place.

REMARQUE: 

print()can print Swift Optionals.

10
pkamb

Avoir le même problème, réponse acceptée ne aide pas. 

func handleSomeResp(_ response: DataResponse<Any>) {
    NSLog("handle error: %@", response)
}

comme vous le voyez, il n'y a rien sur les optionnels. Je suppose que c'est à cause de <Any>, et de tout type, incertain pour NSLog, observe le même problème ici :. Modifiez cette réponse si vous avez une solution pour analyser les génériques de NSLog. 

0