2016-10-03 38 views
16

私は迅速です。私はここでNSLog'NSLog'は利用できません:迅速にバリアリック機能を利用できません

で、このエラーを得ただけで基礎を学んでいるときに私のコードです:

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


} 

私はmyString

このような
var myString: NSString! 

を宣言していた場合はそれを使用するように罰金ですNSLog私はコンソールも見ることができます。

しかしNSLogで、この原因となった問題

var myString: NSString? 

それが反映さのような文字列を宣言し、エラーを示します。

何が問題なのですか?

答えて

14

var myString: NSString?をオプションとして宣言する場合は、NSLogに渡す前に値があることを確認する必要があります。

だから、このようにすることができますNSLog("%@" , myString!)myStringがnilであり、あなたが!を置けばプログラムがクラッシュすると、あなたは

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

を得るでしょう。しかし、それは価値を持っている場合、プログラムは通常通り継続し、私はmyString = "Test"を書いた

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

を出力します。

+1

NSLog( "%@"、myString ?? "")を使用した方が良いでしょうか? – Grimxn

+0

これは絶対に代替の@Grimxnです –

5

NSLog()スウィフトオプションは印刷できません。

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

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

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

代わりに、任意の値をNSLog()に渡して修正します。

関連する問題