私はSwiftが初めてです。基本を学んでいるとき、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
を使用しても問題ありません。コンソールも表示できます。
しかし、問題を引き起こすこのような文字列を宣言する
var myString: NSString?
NSLog
に反映され、エラーが表示されます。
その問題は何ですか?
_var myString: NSString?
_をオプションとして宣言する場合、NSLog
に渡す前に値があることを確認する必要があります。
したがって、NSLog("%@" , myString!)
のようにこれを行うことができます。 myString
がnilで、_!
_を入力すると、プログラムがクラッシュし、
_fatal error: unexpectedly found nil while unwrapping an Optional value.
_
ただし、値がある場合、プログラムは通常どおり続行され、出力されます
_2016-10-03 10:26:25.077 Swift3.0[65214:1579363] Test
_
_myString = "Test"
_と書きました。
NSLog()
は印刷できません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!
_
代わりにNSLog()
にオプションではない値を渡すことで修正します。
注意:
print()
can print Swiftオプション。
同じ問題があり、受け入れられた答えは役に立たない。
func handleSomeResp(_ response: DataResponse<Any>) {
NSLog("handle error: %@", response)
}
ご覧のとおり、オプションについては何もありません。 NSLogでは不明な<Any>
および任意のタイプが原因であると思いますが、同様の問題に注意してください here :。 NSLogのジェネリックを解析するソリューションがある場合は、この回答を編集してください。