【问题标题】:Initializer for conditional binding must have Optional type, not '[AnyHashable : Any]'条件绑定的初始化程序必须具有 Optional 类型,而不是 '[AnyHashable : Any]'
【发布时间】:2020-01-22 05:16:09
【问题描述】:

当我这样输入时:

func onAppOpenAttribution(_ attributionData: [AnyHashable : Any]!) {
    if let data = attributionData {
        if let link = data["link"]{
            print("link:  \(link)")
        }
    }
}

我在这一行 if let data = attributionData 收到错误“条件绑定的初始化程序必须具有可选类型,而不是 '[AnyHashable : Any]'”

如何修复?

【问题讨论】:

    标签: ios swift appdelegate appsflyer appsflyer-ios-sdk


    【解决方案1】:
    func onAppOpenAttribution(_ attributionData: [AnyHashable : Any]?) {
    

    您的 attributionData 应该是可选类型,if let data = attributionData 如果使用 let case 来安全地解开可选值。但是目前您正在向它传递一个非可选值。所以你有两个选择。要么将attributionData 设为可选,要么删除if let statement

    选项 1:

    func onAppOpenAttribution(_ attributionData: [AnyHashable : Any]?) {
        if let data = attributionData {
            if let link = data["link"]{
                print("link:  \(link)")
            }
        }
    }
    

    选项 2:

    func onAppOpenAttribution(_ attributionData: [AnyHashable : Any]) {
        let data = attributionData 
        if let link = data["link"]{
           print("link:  \(link)")
         }
      }
    }
    

    【讨论】:

    • 使用后?警告依旧存在
    • “onAppOpenAttribution”参数的可选性与协议“AppsFlyerTrackerDelegate”替换的预期不同?使用“”之后,如果再次让 data = attributionData 出现错误“条件绑定的初始化程序必须具有可选类型,而不是 '[AnyHashable : Any]'”
    • 那是一个不同的错误。它在您的代码逻辑中。对于您当前的问题,我已经给出了答案。如果您还有其他错误,请提出一个新问题,我们会在那里为您提供帮助 :)
    猜你喜欢
    • 1970-01-01
    • 2015-10-19
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    • 2021-04-26
    • 2016-01-27
    相关资源
    最近更新 更多