在@escaping中允许在swift @escaping中进行多个可选参数 我有这样的方法: func getData(somestring:string,oncomplete:@escaping((_ somearraydata:[string],_ error:error:error:error:error?) - > void)){ 变量结果:[banphone] = [] // s ...

问题描述 投票:0回答:1
Error是可选的,我只想在出现错误时才传递此参数。否则我想寄回结果。 我该如何在这里做到这一点

在回答您的问题时,您将其称为结果,并在成功时将其调用,将错误参数传递给。在成功情况下:

nil

swift escaping closures
1个回答
2
投票

onComplete(result, nil)


abetter,我们更喜欢使用

onComplete(nil, error)

类型。有关实际讨论。

我们偏爱“两个可选参数”模式,因为它使呼叫者明确地说,它将通过一个或另一个错误,但不是两者兼而有之的值或失败。
Result

使用它这样:

Result

现在,这就是两个可选参数模式在实践中倾向于起作用的方式(这是一个或另一个),但是func fetchData(with someString: String, completion: @escaping (Result<[String], Error>) -> Void)) {
    …

    doingSomethingAsynchronous {
        …

        // if failed
    
        if let error {
            completion(.failure(error))
            return
        }
    
        // if successful
    
        completion(.success(value))
    }
}
正式化了合同,使您免于解开选项,等等。

现在,我们将使用Swift并发,这要简单得多:

fetchData(with: string) { result in
    switch result {
    case .failure(let error):
        print(error)

    case .success(let value):
        // do something with `value`
    }
}

因此,您要么值一个值或错误。
	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.