首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift类型的shuffle()

Swift类型的shuffle()
EN

Stack Overflow用户
提问于 2019-06-01 14:34:48
回答 1查看 57关注 0票数 1

我想测试一个函数,传入一个shuffle函数,这样我就可以充分地对该函数进行单元测试。换句话说:

代码语言:javascript
复制
func testme(testArr: [Int], shufflefunction : Shufflefunction = .shuffle) -> [Int] {
    return tetsArr.shufflefunction
}

我知道语法是不正确的;这就是问题所在。

shuffled函数的正确类型是什么,这样我就可以为任何特定的shuffle实现创建一个可重用的函数,就像在上面的函数中传递的那样。

问题的第二部分是如何将标准的shuffle()实现作为测试此函数的默认参数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-01 15:13:17

如果查看Array.shuffled,您将看到它实际上是一个接受数组并返回() -> [T]的函数

因此,Array.shuffled的类型可以写成

代码语言:javascript
复制
(([T]) -> (() -> [T]))

然后我们可以使用它作为我们的参数类型:

代码语言:javascript
复制
func testShuffle<T>(array: [T], function: (([T]) -> (() -> [T])) = Array.shuffled) {
    let shuffleFunction = function(array)
    let shuffledArray = shuffleFunction()
    // do stuff with shuffledArray...
}

// usage
extension Array {
    func myCustomShuffled() -> [Element] {
        // ...
    }
}

let arr = [1,2,3,4,5,6,7]
testShuffle(array: arr, function: Array.myCustomShuffled)

注意,同样的方法不适用于Array.shuffle (变异版本),因为Swift不支持变异函数上的部分应用程序。

您也可以将参数类型编写为([T]) -> [T],然后必须传递默认参数,如下所示:

代码语言:javascript
复制
func testShuffle<T>(array: [T], function: ([T]) -> [T] = { $0.shuffled() }) {
    let shuffledArray = function(array)
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56404419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档