【问题标题】:Cannot convert value of type '[NSObject : AnyObject]' to expected argument type '[String : AnyObject]'无法将类型“[NSObject:AnyObject]”的值转换为预期的参数类型“[String:AnyObject]”
【发布时间】:2015-12-17 22:03:54
【问题描述】:

Xcode7 和 swift,我的代码:

func loadDefaults() {
    let settingBundle = NSBundle.mainBundle().pathForResource("Settings", ofType: "bundle")
    if settingBundle == nil {
        return
    }

    let root = NSDictionary(contentsOfFile: settingBundle!.stringByAppendingString("Root.plist"))

    let prefrences = root?.objectForKey("PreferenceSpecifiers") as! Array<NSDictionary>

    let defautlsToRegister = NSMutableDictionary(capacity: root!.count)

    for prefrence in prefrences {
        let key = prefrence.objectForKey("Key") as! String!
        if key != nil {
            defautlsToRegister.setValue(prefrence.objectForKey("DefaultVale"), forKey: key!)
        }
    }

    NSUserDefaults.standardUserDefaults().registerDefaults(defautlsToRegister as [NSObject: AnyObject])
}

问题代码:

NSUserDefaults.standardUserDefaults().registerDefaults(defautlsToRegister as [NSObject: AnyObject])

建筑警告

无法将类型“[NSObject : AnyObject]”的值转换为预期的参数类型“[String : AnyObject]”

更改代码:

NSUserDefaults.standardUserDefaults().registerDefaults(defautlsToRegister as [String: AnyObject])

建筑警告

'NSMutableDictionary' 不能转换为 '[String : AnyObject]'

请教我怎么做?谢谢。

【问题讨论】:

标签: swift xcode7


【解决方案1】:

您的defautlsToRegister 应采用以下格式[String: AnyObject]

示例:以下内容应该在没有警告的情况下工作

let defautlsToRegister = ["Test":10]
NSUserDefaults.standardUserDefaults().registerDefaults(defautlsToRegister as [String: AnyObject])

【讨论】:

  • 成功了。非常感谢!
【解决方案2】:

对我来说这是可行的。

let token = fields["X-AUTH-TOKEN"]! as? [[String : AnyObject]] //{
                // safe to use employees
                self.bindings.setObject(NSString(format: "%@", token!) as String, forKey: "X-AUTH-TOKEN")

Format(NSString 方法) 将在这种情况下工作。

【讨论】:

  • 你能告诉我投反对票@down voter 的原因是什么吗?对我来说,上面的代码有效。
【解决方案3】:

我注意到这个错误很简单。我不确定是否是这种情况,但投射String to NSString 似乎可以为我解决问题。我找到了一个解释,AnyObject 是一个类型别名,表示任何引用类型的实例,例如:NSString。但是Stringstruct,所以它不能是AnyObject 的引用类型。

我看到了两种方法:

第一:

let keyForMyKey: NSString = NSString(string: "mykey") let result = dict.objectForKey(keyForMyKey) as? NSMutableArray

第二:

let result = dict.objectForKey(NSString(string: "myKey")) as? NSMUtableArray

更多问题在这里:http://drewag.me/posts/swift-s-weird-handling-of-basic-value-types-and-anyobject

【讨论】:

    猜你喜欢
    • 2016-06-28
    • 1970-01-01
    • 2018-03-01
    • 2016-07-27
    • 2016-07-02
    • 2016-03-21
    • 1970-01-01
    • 2020-03-01
    • 2016-08-01
    相关资源
    最近更新 更多