gpt4 book ai didi

swift - 链式通用类型在 swift 中推断闭包

转载 作者:行者123 更新时间:2023-11-28 12:03:28 24 4
gpt4 key购买 nike

我正在努力在脑海中概念化如何创建一个通用的接口(interface)或类,其功能 像这样。

 functionOne {
return "123"
}
.chainedFunction { string -> Int in
return Int(string) + 456
}
.anotherChain {
[NSNumber($0), String($0)]
}
.lastInTheChain {
print("value 1: \($0[0])")
print("value 2: \($0[1])")
}

所以要让它工作,它本质上是一个函数数组,将其返回值通过管道传递给 下一个函数的参数列表。

假设每个函数闭包都以它来自的函数命名 即

 functionOne(_ functionOne:(T) -> T) {}
chainedFunction(_ chainedFunction:(T) -> T) {}

然后你会像这样调用它们以确保你传递了正确的值。

lastInTheChain(anotherChain(chainedFunction(functionOne())))

我最关心的部分是泛型部分以及类型推断是否有效 (这是次要问题,如果它有效就好了)

我也尝试使用协议(protocol),而 swift 中的通用协议(protocol)需要到处使用 thunk,这只会让我更加困惑。

所以任何知识渊博的人,如果你不介意说说我是怎么做到的,或者它是否可行,我将不胜感激。

最佳答案

functionOne 需要返回具有 chainedFunction 实例方法的东西,它本身需要返回具有 anotherChain 实例方法的东西,等等。为此,您需要创建一个类型。我将其称为包装器,因为我不知道您的用例,但您应该将其命名为更有意义的名称。

import Foundation

struct Wrapper<T> {
let value: T

// This replaces `function1`
init(_ value: T) { self.value = value }

func chainedFunction<R>(_ transform: (T) -> R) -> Wrapper<R> {
return Wrapper<R>(transform(self.value))
}

func anotherChain<R>(_ transform: (T) -> R) -> Wrapper<R> {
return Wrapper<R>(transform(self.value))
}

func lastInTheChain<R>(_ transform: (T) -> R) -> R {
return transform(self.value)
}
}

Wrapper("123")
.chainedFunction { string -> Int in
return Int(string)! + 456
}
.anotherChain {
[NSNumber(value: $0), String($0)]
}
.lastInTheChain {
print("value 1: \($0[0])")
print("value 2: \($0[1])")
}

术语:此 Wrapper 类型称为 functor ,因为它定义了一个 map 方法(这里称为 chainedFunctionanotherChain ,它们是示例中的等效函数)。使用 map ,可用于将 T 转换为 R(转换)的闭包可用于将 Wrapper<T> 转换为 Wrapper<R>

关于swift - 链式通用类型在 swift 中推断闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49850270/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com