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

Him*_*nth 27 nslog ios 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.
    }


}
Run Code Online (Sandbox Code Playgroud)

如果我这样宣布的myString话

var myString: NSString!
Run Code Online (Sandbox Code Playgroud)

它很好用NSLog,我也可以看到控制台.

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

var myString: NSString?
Run Code Online (Sandbox Code Playgroud)

它反映NSLog并显示错误.

有什么问题?

Ras*_*n L 20

如果您声明var myString: NSString?为可选,那么在将其传递给之前,您需要确保它具有值NSLog.

所以你可以这样做NSLog("%@" , myString!).如果myString是零,你把!程序崩溃,你会得到

fatal error: unexpectedly found nil while unwrapping an Optional value.
Run Code Online (Sandbox Code Playgroud)

但如果它有一个值,程序将继续正常并打印出来

2016-10-03 10:26:25.077 Swift3.0[65214:1579363] Test
Run Code Online (Sandbox Code Playgroud)

我写道myString = "Test".

  • 最好使用`NSLog("%@",myString ??"<nil>")` (3认同)

pka*_*amb 14

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!
Run Code Online (Sandbox Code Playgroud)

通过传递非可选值来修复NSLog().

注意:

print() 可以打印Swift Optionals.