Swift 游乐场错误:调用中的额外参数“超时”

Posted

技术标签:

【中文标题】Swift 游乐场错误:调用中的额外参数“超时”【英文标题】:Swift playground error: extra argument 'timeout' in call 【发布时间】:2018-06-07 08:51:56 【问题描述】:

我正在尝试在操场上运行此代码:

//: Playground - noun: a place where people can play

import UIKit
import XCTest

// Create an expectation for a background download task.
let expectation = XCTestExpectation(description: "Download apple.com home page")

// Create a URL for a web page to be downloaded.
let url = URL(string: "https://apple.com")!

// Create a background task to download the web page.
let dataTask = URLSession.shared.dataTask(with: url)  (data, _, _) in

    // Make sure we downloaded some data.
    XCTAssertNotNil(data, "No data was downloaded.")

    // Fulfill the expectation to indicate that the background task has finished successfully.
    expectation.fulfill()



// Start the download task.
dataTask.resume()

// Wait until the expectation is fulfilled, with a timeout of 10 seconds.
wait(for: [expectation], timeout: 10.0)

我从https://developer.apple.com/documentation/xctest/asynchronous_tests_and_expectations/testing_asynchronous_operations_with_expectations复制的

我得到的错误:

Playground execution failed:

error: MyPlayground2.playground:21:35: error: extra argument 'timeout' in call
wait(for: [expectation], timeout: 10.0)
                                  ^~~~

为什么我在操场上收到此错误?在普通项目中使用 wait(for:timeout:) 时,它可以工作。

【问题讨论】:

Swift - Extra Argument in call的可能重复 我会说“有点”。 【参考方案1】:

正如Shripada所指出的:

如果类/结构方法与同名但参数不同的全局方法之间存在冲突,则会出现此错误。

要在 Playground 中成功使用类方法,请在其前面加上类名称以消除 XCTWaiter.wait(for:timeout:) 的歧义:

XCTWaiter.wait(for: [expectation], timeout: 10.0)

另一方面,如果有一天你想使用 wait.h 的冲突方法,它的 Swift 签名为 public func wait(_: UnsafeMutablePointer<Int32>!) -> pid_t,你可以在它前面加上 Darwin 模块名称:

Darwin.wait()

【讨论】:

以上是关于Swift 游乐场错误:调用中的额外参数“超时”的主要内容,如果未能解决你的问题,请参考以下文章

swift2:调用中的额外参数“错误”

session.dataTask 调用错误中的 Swift5 额外参数“completionHandler”

Swift 4“调用中的额外参数”Rxswift

使用格式参数时,Swift 中的字符串初始值设定项问题

Swift 3.0 迁移后的 Alamofire 错误:“调用中的额外参数”(请求方法)

Swift 中的额外参数调用