我对斯威夫特不熟悉。当我学习基本知识的时候,我在NSLog上得到了这个错误
这里是我的代码:
import UIKit
class ViewController: UIViewController {
var myString: NSString?
override func viewDidLoad() {
super.viewDidLoad()
myString = "himanth"
print(myString)
NSLog("%@" , myString)
// Do any additional setup 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上,并显示错误。
有什么问题吗?
发布于 2016-10-03 08:27:34
如果您将var myString: NSString?声明为可选的,那么在将它传递给NSLog之前,需要确保它有一个值。
所以你可以这样做然后NSLog("%@" , myString!)。如果myString为0,并且将!放入,程序将崩溃,您将得到
fatal error: unexpectedly found nil while unwrapping an Optional value.但是,如果它有一个值,程序将继续正常并打印出来。
2016-10-03 10:26:25.077 Swift3.0[65214:1579363] Test我写了myString = "Test"。
@Grimxn提到的另一个例子是合并操作符。
NSLog("%@", myString ?? "<nil>")发布于 2017-01-15 22:20:37
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()来修正。
注意:
print() 可以打印快速选项。
发布于 2019-02-13 12:14:57
有同样的问题,接受的答案没有帮助。
func handleSomeResp(_ response: DataResponse<Any>) {
NSLog("handle error: %@", response)
}如你所见,选拔赛毫无意义。我想这是因为<Any>,以及任何类型的,对于NSLog不清楚,看类似的问题here:。如果您有解析NSLog泛型的解决方案,请编辑此答案。
https://stackoverflow.com/questions/39827155
复制相似问题