簡體   English   中英

Swift:DateFormatter 返回 nil

[英]Swift: DateFormatter returning nil

我遇到了一個奇怪的問題,即 DateFormatter 返回 nil 以獲得有效的數據字符串。

這是我的代碼:

func dateFromString(_ dateString:String,  format: String = "dd/MM/yy") -> Date?
{
    let dueDateFormatter = DateFormatter()
    dueDateFormatter.timeZone = TimeZone(identifier: "UTC")!
    dueDateFormatter.dateFormat = format
    let date = dueDateFormatter.date(from: dateString)
    return date
 }

func applicationDidFinishLaunching(_ aNotification: Notification)
{
    print("Launched")
    let dd = dateFromString("Aug 20", format: "MMM yy")
    print (dd!)
}

在調試器中:

在此處輸入圖像描述

似乎該變量已設置並且可以在應用程序中使用,但調試器沒有顯示它。 這是一個 Xcode 錯誤還是我要瘋了?

在操場上一切正常,我在我的代碼的其他區域多次使用這個 function。

我正在使用 10.15.4 和 Xcode 11.4.1

在玩了一些調試器之后,我弄清楚了為什么會這樣。

發生這種情況的原因是因為它是Date 如果您更改方法以返回NSDate ,調試器會正確顯示它。

根據我的觀察:這種行為發生在Date的類型組以及TimeZone等其他類型所屬的組中。 也就是說, Foundation中的 Swift 類型具有 Objective-C 對應物,但不是像DateFormatter / NSDateFormatter這樣的“直接端口”。 我不能很好地描述它,但基本上是Foundation中的類型,他們的文檔頁面不允許您在右上角 select 和 Objective-C 版本。 頁面上的大多數類型也會發生這種情況,這些類型也在Foundation中。 例外情況是:

  • AffineTransform
  • Data
  • DateInterval
  • Measurement
  • Notification

如果您使用另一個調試器命令po ,您將看到它正確顯示Date 那么printpo和有什么區別?

運行help printhelp po可以告訴我們:

print

 Evaluate an expression on the current thread. Displays any returned value with LLDB's default formatting. Expects 'raw' input (see 'help raw-input'.) Syntax: print <expr> Command Options Usage: print <expr> 'print' is an abbreviation for 'expression --'

po

 Evaluate an expression on the current thread. Displays any returned value with formatting controlled by the type's author. Expects 'raw' input (see 'help raw-input'.) Syntax: po <expr> Command Options Usage: po <expr> 'po' is an abbreviation for 'expression -O --'

請注意po它如何表示“格式由類型的作者控制”。 如果你輸入help expression ,你會看到-O選項的expression的作用:

如果可能,使用特定於語言的描述 API 進行顯示。

因此可以得出結論poprint更“特定於 Swift”,因此它能夠打印出DateTimeZone之類的東西,因為print根本不知道如何打印 Swift Date

暫無
暫無

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

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