是否有客观原因我不能拥有带元素标签的单元素元组?

sam*_*m-w 10 swift

在Swift中直到并包括Swift 3,我无法创建一个单元素元组,其中元素被命名.所以func foo() -> Bar很好,但func foo() -> (bar: Bar)会产生编译器错误.

但是,我可以想到这种模式的一些可能的用途,例如

func putTaskOnQueue() -> (receipt: CancellableTask)

func updateMyThing() -> (updatedSuccessfully: Bool)
Run Code Online (Sandbox Code Playgroud)

...标签用于减少返回值表示的含糊之处.

显然,有很多方法可以重新设计我的apis以解决这个限制,但我很好奇为什么它存在.

这是编译器限制吗?是否允许1元组上的元素标签破解其他语法的解析?这已经作为Swift Evolution系统的一部分进行了讨论吗?

要明确:我不是就上述例子的正确性征求意见.我正在解释为什么这在技术上是不可能的解释(如果存在的话).

Rob*_*ier 11

是的,这是由于编译器的限制.Swift中根本没有一个元组.每一件都T可以轻松兑换(T).SE-110SE-111应该改进,但我不确定这是否足以使这成为可能,我不相信任何当前的提案明确地确实可行.

已经讨论过迅速演化.这不是语言的理想特征; 这是其他选择的结果.

Swift Evolution过程非常开放.我强烈建议将这样的问题列入清单(在搜索档案之后;当然不像你希望的那样简单).StackOverflow只能提供传闻; 该清单更加明确.