Ios 错误:';结果<;数据,FourSquareError>';无法构造,因为它没有可访问的初始值设定项

Ios 错误:';结果<;数据,FourSquareError>';无法构造,因为它没有可访问的初始值设定项,ios,swift,rest,swift5,Ios,Swift,Rest,Swift5,我试图调用API,当我将值传递给结果变量时,它会给我一个错误。我在下面的func mapError函数中也遇到了这个错误 知道我为什么会犯这个错误吗 提前谢谢 无法构造“Result[Data,FourSquareError]”,因为它没有可访问的初始值设定项 无法构造“Result[Data,E]”,因为它没有可访问的初始值设定项 错误在以下几行: let result = Result<Data, FourSquareError>(value: data, error:

我试图调用API,当我将值传递给结果变量时,它会给我一个错误。我在下面的func mapError函数中也遇到了这个错误

知道我为什么会犯这个错误吗

提前谢谢

无法构造“Result[Data,FourSquareError]”,因为它没有可访问的初始值设定项

无法构造“Result[Data,E]”,因为它没有可访问的初始值设定项

错误在以下几行:

let result = Result<Data, FourSquareError>(value: data, error:
          translatedError)

return Result<Value, E>(value)

return Result<Value, E>(try transform (error))
typealias JSON = [String: Any]

enum FourSquareError: Error {
    case couldNotCreateURL
    case networkError(Error)
    case serverError(errorType: String, errorDetail: String)
    case couldNotParseData
}

func createURL(endpoint: String, parameters: [String: String]) -> URL? {
    let baseURL = "https://api.foursquare.com/v2/"

    // We convert the parameters dictionary in an array of URLQueryItems
    var queryItems = parameters.map { pair -> URLQueryItem in
        return URLQueryItem(name: pair.key, value: pair.value)
    }

    // Add default parameters to query
    queryItems.append(URLQueryItem(name: "v", value: apiVersion))
    queryItems.append(URLQueryItem(name: "client_id", value: clientId))
    queryItems.append(URLQueryItem(name: "client_secret", value: clientSecret))

    var components = URLComponents(string: baseURL + endpoint)
    components?.queryItems = queryItems
    return components?.url
}
func-getviouses(纬度:双精度,经度:双精度,完成度:@escaping
(结果)->无效){
设参数=[
“ll”:“\(纬度),\(经度)”,
“意图”:“浏览”,
“半径”:“250”
]
guard let url=createURL(端点:“场馆/搜索”),参数:
参数)
否则{
完成(结果失败(.couldNotCreateURL))
返回
}
让task=URLSession.shared.dataTask(with:url){data,response,
错误
让translateError=error.map{FourSquareError.networkError($0)}
让结果=结果(值:数据,错误:
翻译错误)
//将数据解析为JSON
.flatMap{中的数据
做{
返回Result.success(尝试解析数据(data))
}抓住{
返回结果。失败(.unexpectedError(error))
}
}
//检查服务器错误
.flatMap{(json:json)->导致
做{
返回Result.success(尝试validateResponse(json:json))
}抓住{
返回结果。失败(.unexpectedError(error))
}
}
//提取场地
.flatMap{(json:json)->导致
做{
返回Result.success(尝试使用(json:json))
}抓住{
返回结果。失败(.unexpectedError(error))
}
}
完成(结果)
}
task.resume()
}
扩展结果{
公共函数映射错误(uTransform:(ErrorType)抛出->E)返回->结果{
切换自身{
成功案例(let value):
返回结果(值)
案例。失败(let错误):
返回结果(尝试转换(错误))
}
}
}

结果是一个枚举,因此您可以构造它。您只能通过以下两种情况之一实例化
结果
实例:
失败
成功
。例如:

let result: Result<Data, FourSquareError> = .success(Data())
let result:result=.success(Data())

let result:result=.failure(FourSquareError.where)

我试图这么做,但又出现了另一个错误:
无法根据成员“success”推断上下文基础。
。成功和失败都是如此。对此有何想法?使用此解决方案后,此问题似乎已得到解决<代码>扩展结果{init(value:value?,error:ErrorType?{if let error=error{self=.failure(error)}else if let value=value{self=.success(value)}else{fatalError(“无法创建结果”)}很难说清楚您的代码中有哪些缺陷。我发布的解决方案中的代码对我来说编译得很好。@Marcelo这是一个与原始问题完全不同的问题,但是,您需要在第一个flatMap闭包中指定返回类型:
.flatMap{data->Result in
谢谢。我只需要在您提到的第一个flatMap中修复此错误。“Result”类型的值没有成员“flatMap”。知道吗?
extension Result {
    public func mapError<E: Error>(_ transform: (ErrorType) throws -> E) rethrows -> Result<Value, E> {
        switch self {
        case .success(let value):
            return Result<Value, E>(value)
        case .failure(let error):
            return Result<Value, E>(try transform (error))
        }
    }
}

let result: Result<Data, FourSquareError> = .success(Data())
let result: Result<Data, FourSquareError> = .failure(FourSquareError.whatever)