2017-07-28 11 views
-1

エラー "タイプ 'Any'には添え字メンバーがありません。 $ 0 ["締め切り"]でラインリターンを返します。構文をswift 3に変換すると、タイプ 'Any'に下付きメンバはありませんか?

これが唯一の私がSWIFT 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.dictionary(forKey:)[String:Any]の辞書を返しますので、UserDefaultsから[String:TodoItem]に検索した辞書をキャストする必要があります。

以下の作業コードを参照してください:

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 –

関連する問題