[英]'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.