【问题标题】:Swift.Bool isn't a Bool?Swift.Bool 不是 Bool 吗?
【发布时间】:2021-10-22 06:08:15
【问题描述】:

我有一个函数

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

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

completion(false)

completion(true)

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

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

【问题讨论】:

  • 通过输入 你声明了一个覆盖 Swift.Bool 的通用约束。如果您想了解 的作用,请查找泛型。
  • 我怀疑您有自己的自定义类型,也称为Bool。如果您命令+单击completion 输入的Bool,可能会看到您自定义Bool 类型的定义。编辑:似乎你已经编辑了你的问题,但没关系它已经回答了;)

标签: swift types


【解决方案1】:

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

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

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

有关&lt;...&gt; 语法和泛型的详细信息,请参阅《Swift 编程语言》中的Generics

【讨论】:

  • 嘿,Rob,这个答案比我预期的要简单和简洁得多,对此我一直摸不着头脑。感谢您的解释和帮助。我会更多地研究泛型,我最近一直在试图弄清楚它们。
  • @Timothy 您应该尽快接受 Rob 的回答。它像往常一样出色(投票)。一旦你有足够的声誉,就可以考虑为这样的高质量答案投票。
  • 我刚刚做到了。不幸的是,我还不知道如何提出好的问题,所以我的声誉有点停滞,但这就是目标。谢谢邓肯的建议。能够访问这个平台,我感到非常幸运。
猜你喜欢
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-09
相关资源
最近更新 更多