2016-02-15 118 views
-1

我正在建立我的锁匠应用程序,我有以下代码:锁匠无法下标类型的值“[字符串:AnyObject]”与类型的索引“字符串”

let kAttrAccount = "Driver" 

class User { 
    var token: String? 

    init() { 
    let account = Locksmith.loadDataForUserAccount(kAttrAccount) 
    if let account = account { 
     self.token = account["token"] 
     print(self.token) 
    } 
    } 

    convenience init (token: String) { 
    let _ = try? Locksmith.saveData(["token": token], forUserAccount: kAttrAccount) 
    self.init() 
    } 
} 

当我尝试为iOS构建我的应用程序时,出现错误self.token = account["token"],我收到错误Cannot subscript a value of type '[String : AnyObject]' with an index of type 'String'

为了测试,我把下面的代码放到一个游乐场,它工作正常:

import UIKit 
import Foundation 
import Locksmith 

let _ = try? Locksmith.saveData(["token": "something"], forUserAccount: "GoDriver") 

let account = Locksmith.loadDataForUserAccount("GoDriver") 

if let account = account { 
    account["token"] 
} 
+0

self.token = account [“token”] as?字符串 – mrkbxt

+0

“为了测试,我将下面的代码扔进了游乐场,它工作正常。”因为你在游乐场里测试的东西不是一回事! – matt

回答

1

的问题是,account[String:AnyObject],所以account["token"]是AnyObject。您不能将AnyObject分配给String?,这就是您的self.token。你将不得不施放它。例如:

let account = Locksmith.loadDataForUserAccount(kAttrAccount) 
if let account = account { 
    if let tok = account["token"] as? String { 
     self.token = tok 
     print(self.token) 
    } 
} 

以上可凝结,但我向你们表示非常完整的形式让你明白这是怎么回事。

+0

我会给你这个:它不是Swift编译器中非常有用的错误消息。但那里没有新东西。 ( – matt

+0

)这个工作,但现在我间歇性地有帐户价值回来零。任何想法为什么这可能会发生在概念上吗? –

+0

这将是一个整体'没有问题!你的问题是关于_syntax_(编译),我们解决了这个问题。现在你对锁匠_works_(运行时)有什么问题了,所以如果你有一个新问题,请提出一个新问题;不要回过头来回答评论者的回答。 – matt

相关问题