簡體   English   中英

'NSLog' 不可用:可變參數函數在 swift 中不可用

[英]'NSLog' is unavailable: Variadic function is unavailable in swift

我是 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並顯示錯誤。

這有什么問題?

如果聲明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()無法打印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。

有同樣的問題,接受的答案無濟於事。

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

如您所見,沒有關於可選內容的任何內容。 我猜是因為<Any>以及任何類型(對於NSLog尚不清楚),請在此處觀看類似的問題:。 如果您有解析NSLog泛型的解決方案,請編輯此答案。

NSLog不支持除String之外的任何類型。 你不能傳遞,即你的自定義結構/枚舉實例作為 NSLog 可變參數。

而是使用description變量來顯示有關您的實例的必要詳細信息。 您的類/結構/枚舉也可以符合CustomStringConvertible以統一訪問description變量的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM