'NSLog'不可用:swift中无法使用Variadic功能

时间:2016-10-03 08:14:59

标签: ios swift 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很好,我也可以看到控制台。

但是声明这样的字符串会导致问题

var myString: NSString?

它反映在NSLog并显示错误。

有什么问题?

3 个答案:

答案 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泛型的解决方案,请编辑此答案。