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?
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"
.
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.
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.