【问题标题】:Cannot convert value of type 'Result' to expected argument type 'EmailContentData'无法将“Result”类型的值转换为预期的参数类型“EmailContentData”
【发布时间】:2020-03-04 01:39:41
【问题描述】:
enum Result {
case success(r: EmailContentData)
case failure(e: Error)}


static func getMessageList(index : Int, pageCount: Int, completion : @escaping (EmailContentData) -> ())
{
    DispatchQueue.global(qos: .userInteractive).async
        {
            let apiString : String = String(index) + "/" + String(pageCount)
            var objEmailContentData : EmailContentData? = EmailContentData.init(fromDictionary: NSDictionary())

            ApiHelper.sharedSession.post(Constant.API.messagelistApi + apiString, postData: NSDictionary(), methodtype: Constant.API.httpGet) { (isError, data, errorDescription) in
                guard let data = data else { return }
                do {
                    let result = EmailContentData.init(fromDictionary: data.value(forKey:"data") as! NSDictionary)
                    completion(Result.success(r: result))
                } catch let error {
                    completion(Result.failure(e: error))
                }
            }
    }
}

我在成功时遇到错误“无法将 'Result' 类型的值转换为预期的参数类型 'EmailContentData'” 和类似的完成错误“无法将'Result'类型的值转换为预期的参数类型'EmailContentData'”

请任何人告诉我我做错了什么?提前致谢:-)

【问题讨论】:

    标签: ios swift types casting type-conversion


    【解决方案1】:

    使用@escaping (Result) -> () 而不是@escaping (EmailContentData) -> ()

    static func getMessageList(index : Int, pageCount: Int, completion : @escaping (Result) -> ())
    {
        DispatchQueue.global(qos: .userInteractive).async
            {
                let apiString : String = String(index) + "/" + String(pageCount)
                var objEmailContentData : EmailContentData? = EmailContentData.init(fromDictionary: NSDictionary())
    
                ApiHelper.sharedSession.post(Constant.API.messagelistApi + apiString, postData: NSDictionary(), methodtype: Constant.API.httpGet) { (isError, data, errorDescription) in
                    guard let data = data else { return }
                    do {
                        let result = EmailContentData.init(fromDictionary: data.value(forKey:"data") as! NSDictionary)
                        completion(Result.success(r: result))
                    } catch let error {
                        completion(Result.failure(e: error))
                    }
                }
        }
    }
    

    【讨论】:

    • catch let error { completion(Result.failure(e: error)) } 'catch' 块无法访问,因为 'do' 块中没有抛出错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 2016-07-02
    • 2016-03-21
    • 1970-01-01
    • 2020-03-01
    • 2016-08-01
    • 2017-02-07
    相关资源
    最近更新 更多