我是新手。当我正在学习基础时,我在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
并显示错误。
有什么问题?
答案 0 :(得分:19)
如果您将var myString: NSString?
声明为可选项,那么在将其传递给NSLog
之前,您需要确保它具有值。
所以你可以这样做NSLog("%@" , myString!)
。如果myString
为零且您放置!
,程序将崩溃,您将获得
fatal error: unexpectedly found nil while unwrapping an Optional value.
但如果它有一个值,程序将继续正常并打印出来
2016-10-03 10:26:25.077 Swift3.0[65214:1579363] Test
我写了myString = "Test"
。
答案 1 :(得分:11)
NSLog()
无法打印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!
通过将非可选值传递给NSLog()
来修复。
注意:
print()
可以 打印Swift Optionals。
答案 2 :(得分:0)
遇到同样的问题,接受的答案无济于事。
func handleSomeResp(_ response: DataResponse<Any>) {
NSLog("handle error: %@", response)
}
如您所见,与可选项无关。
我猜是由于<Any>
以及其他类型(对于NSLog尚不清楚)引起的,类似的问题here:。
如果您有解析NSLog泛型的解决方案,请编辑此答案。