swift - 无法使用类型为 'value' 的参数列表调用 '(String)'

标签 swift swift3 migration

我是 Swift 的初学者,我正在将应用程序迁移到 Swift 3.0

我一直有这个错误,我不知道如何解决。

“无法使用类型为‘(String)’的参数列表调用‘value’”

它几乎显示在这段代码的每一行。 你知道它可能来自哪里吗? 非常感谢

        if ((message as AnyObject).value("content") != nil){
            stringContent  = (message as AnyObject).value("content") as? String
        }

        if ((message as AnyObject).value("sender_uuid") != nil){
            stringSenderUuid  = (message as AnyObject).value("sender_uuid") as? String
        }

        if ((message as AnyObject).value("recipient_uuid") != nil){
            stringRecipientUuid  = (message as AnyObject).value("recipient_uuid") as! String
        }

        if ((message as AnyObject).value("date") != nil){

            if let result_number = (message as AnyObject).value("date") as? NSNumber
            {
                stringDate = "\(result_number)"
            }
            else   {

                stringDate  = (message as AnyObject).value("date") as! String

            }

        }

这里要求的是关于消息的更多信息

class Messages: Object {

dynamic var channel_name = ""
dynamic var content = ""
dynamic var sender_uuid = ""
dynamic var recipient_uuid = ""
dynamic var date = ""
dynamic var message_uuid = ""


override class func primaryKey() -> String? {
    return "message_uuid"
}    }



    let message = Messages()
    message.channel_name=channel_name
    message.content=stringContent
    message.sender_uuid = stringSenderUuid
    message.recipient_uuid = stringRecipientUuid
    message.date = stringDate
    message.message_uuid = stringUuid

这里有更多信息

        // initialize with nothing
    var stringContent = " "
    var stringSenderUuid = " "
    var stringRecipientUuid = " "
    var stringDate = " "
    var stringUuid = " "


    // We check for existence in the dictionnary
    if (message["content"] != nil){
         stringContent  = message["content"] as! String
    }

    if (message["sender_uuid"] != nil){
         stringSenderUuid  = message["sender_uuid"] as! String
    }

    if (message["recipient_uuid"] != nil){
         stringRecipientUuid  = message["recipient_uuid"] as! String
    }

    if (message["date"] != nil){
        if let result_number = message.value(forKey: "date") as? NSNumber
        {
            stringDate = "\(result_number)"
        }
        else   {

            stringDate  = message.value(forKey: "date") as! String

        }
    }
    if (message["uuid"] != nil){
         stringUuid  = message["uuid"] as! String
    }

最佳答案

您可能需要将它们更改为 (message as AnyObject).value(forKey:"···")(添加 forKey: 标签)。

你知道 message 应该是什么样的对象吗?反复将其转换为 AnyObject 很奇怪。创建一个新变量会更简洁 - let messageObject = message as AnyObject 然后调用 messageObject.value(forKey:"···")。 (我怀疑你真的想把它转换成 Dictionary 或类似的东西,在这种情况下你可以做 messageDictionary["···"] 而不是调用 值(forKey:)。)

此外,在 Swift 中,您可以这样做以进一步减少冗余:

if let content = messageObject.value(forKey:"content") as? String {
  stringContent = content
}

关于swift - 无法使用类型为 'value' 的参数列表调用 '(String)',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42094734/

相关文章:

ios - Alamofire(雨燕3) : Ambiguous reference to member 'upload(..'

ios - 示例代码更改为防护并指出崩溃

ios - 如何实现一个单选按钮在选择时处于事件状态?

php - 如何回显 Laravel 和 Artisan 中的控制台?

java - ActionRedirect 迁移到 Struts 2

objective-c - 与 Objective-C 选择器冲突的方法 - 最后是 'with'

ios - 如何在本地计算机或 AWS/第 3 方托管站点上托管 Realm 服务器?

cocoa - 如何在 swift 应用程序中使用 sparkle updater?

arrays - 如何比较数组中的时间?

laravel - 如何删除多列上的唯一键?