首页 > 解决方案 > Swift.Bool 不是 Bool 吗?

问题描述

我有一个功能

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

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

completion(false)

或者

completion(true)

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

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

标签: swifttypes

解决方案


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

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

func login(parameters: [(String, Any)],
           completion: @escaping (Bool) -> Void) {

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


推荐阅读