Swift.Bool 不是 Bool 吗?

Tim*_*thy 2 types swift

我有一个功能

func login<Bool> (parameters: [(String, Any)],
                  completion: @escaping (Bool) -> Void) {
    //Do something
}
Run Code Online (Sandbox Code Playgroud)

每当我像这样调用完成处理程序时

completion(false)
Run Code Online (Sandbox Code Playgroud)

或者

completion(true)
Run Code Online (Sandbox Code Playgroud)

XCode 一直告诉我:“无法将类型 'Swift.Bool' 的值转换为预期的参数类型 'Bool'”

最终,我删除了函数开头的 ,错误消失了。我认为这是在声明函数的类型,但坦率地说,我不确定这意味着什么,或者尽管使用谷歌搜索,<> 做了什么。我确定它解释得很好,但我并没有通过谷歌搜索来理解这个概念。以及为什么 Swift.Bool 无法转换为 Bool。我发现有一个客观的 C 版本的 bool 并且我认为它可能是在要求这个,但这也不起作用。Bool 是什么意思?

Rob*_*ier 7

该语法func login<Bool>定义了一个名为 的类型参数Bool。它与Swift.Bool. 这只是您定义的名称。这就像你声明了一个局部变量一样var Bool: String。您将有一个名为Bool实际上是字符串的变量。不要那样做。

如果您希望该值始终为 Bool,请删除类型参数。这不是通用的。

func login(parameters: [(String, Any)],
           completion: @escaping (Bool) -> Void) {
Run Code Online (Sandbox Code Playgroud)

有关<...>语法和泛型的详细信息,请参阅The Swift Programming Language 中的泛型

  • @Timothy 你应该尽快接受罗布的回答。它像往常一样出色(投票)。一旦您拥有足够的声誉,请考虑为这样的高质量答案投票。 (2认同)
  • 我刚刚做到了。不幸的是,我还不太知道如何提出好问题,所以我的声誉有点停滞不前,但这就是目标。谢谢邓肯的建议。能够进入这个平台,我感到非常幸运。 (2认同)