2017-07-28 55 views
-1

錯誤「類型」任何'沒有下標成員。「在線返回$ 0 [「截止日期」]。將語法轉換爲swift 3時,Type'Any'沒有下標成員?

當我轉換語法迅速3.

TodoList的文件,這只是發生

fileprivate let ITEMS_KEY = "todoItems" 

func allItems() -> [TodoItem] { 
    let todoDictionary = UserDefaults.standard.dictionary(forKey: ITEMS_KEY) ?? [:] 
    let items = Array(todoDictionary.values) 
    return items.map({TodoItem(deadline: $0["deadline"] as Date, title: $0["title"] as! String, UUID: $0["UUID"] as! String!)}).sort({(left: TodoItem, right:TodoItem) -> Bool in 
     (left.deadline.compare(right.deadline) == .orderedAscending) 
    }) 
} 

的TodoItem文件

struct TodoItem { 
var title: String 
var deadline: Date 
var UUID: String 

init(deadline: Date, title: String, UUID: String) { 
    self.deadline = deadline 
    self.title = title 
    self.UUID = UUID 
} 

var isOverdue: Bool { 
    return (Date().compare(self.deadline) == ComparisonResult.orderedDescending) 

} 
} 

回答

1

首先,你不能使用訪問結構的值下標語法,您必須使用點語法,如下所示:let deadline = todoItem.deadline,其中todoItemTodoItem類的實例。

其次,你必須投檢索字典從UserDefaults[String:TodoItem],因爲UserDefaults.dictionary(forKey:)回報[String:Any]類型的字典。

請參見下面的工作代碼:

func allItems() -> [TodoItem] { 
    let todoDictionary = UserDefaults.standard.dictionary(forKey: ITEMS_KEY) as? [String:TodoItem] ?? [:] 
    let items = Array(todoDictionary.values) 
    return items.map({TodoItem(deadline: $0.deadline, title: $0.title, UUID: $0.UUID)}).sort({(left: TodoItem, right:TodoItem) -> Bool in 
     (left.deadline.compare(right.deadline) == .orderedAscending) 
    }) 
} 
+0

謝謝。大衛:D –

相關問題