【问题标题】:'NSLog' is unavailable: Variadic function is unavailable in swift'NSLog' 不可用:可变参数函数在 swift 中不可用
【发布时间】:2016-10-03 08:14:59
【问题描述】:

我是 swift 新手。当我学习基础知识时,我在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 并显示错误。

这有什么问题?

【问题讨论】:

    标签: ios swift nslog


    【解决方案1】:

    如果您将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"

    @Grimxn 提到的另一个例子是合并运算符。

    NSLog("%@", myString ?? "<nil>")
    

    【讨论】:

    • 确定使用NSLog("%@", myString ?? "&lt;nil&gt;") 更好吗?
    • 这绝对是另一种选择@Grimxn
    【解决方案2】:

    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。

    【讨论】:

      【解决方案3】:

      有同样的问题,接受的答案没有帮助。

      func handleSomeResp(_ response: DataResponse<Any>) {
          NSLog("handle error: %@", response)
      }
      

      如您所见,没有任何关于可选的内容。 我猜是因为&lt;Any&gt;,以及任何类型,对于 NSLog 不清楚,请观看类似的问题here: 。 如果您有解析 NSLog 泛型的解决方案,请编辑此答案。

      【讨论】:

        【解决方案4】:

        NSLog 不支持除String 之外的任何类型。您不能通过,即您的自定义结构/枚举实例作为 NSLog 可变参数。

        改为使用description 变量来显示有关您的实例的必要详细信息。您的类/结构/枚举也可以符合CustomStringConvertible 以统一访问description 变量的方式。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多