swift - 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,我想也许它是在要求它,但这也不起作用。这意味着什么是布尔值?
解决方案
该语法func login<Bool>
定义了一个名为 的类型参数Bool
。它与 . 无关Swift.Bool
。这只是您定义的名称。就好像你声明了一个局部变量一样var Bool: String
。你会有一个名为的变量Bool
,它实际上是一个字符串。不要那样做。
如果您希望值始终为 Bool,请删除类型参数。这不是通用的。
func login(parameters: [(String, Any)],
completion: @escaping (Bool) -> Void) {
有关<...>
语法和泛型的详细信息,请参阅The Swift Programming Language 中的泛型。
推荐阅读
- bots - 如何将 Bot 设置为自动欢迎消息或组规则以新加入成员或订阅者-Telegram
- html - 如何修复css列上溢出的段落标签?
- ionic-framework - ionic show 中的传单地图总是显示 itineray,show:false 不起作用
- testing - 如何为 Plug 错误处理编写测试
- git - 修改后的提交恢复到之前的提交
- jquery - 而不是 iframe ?我想使用 jquery 函数,iframe 需要很长时间才能加载?
- c++ - std::unordered_map::rehash() 函数可以减少哈希冲突吗?
- excel - 重命名工作表给出“内存不足”;CurrentRegion 属性失败
- python - Python 检查对象是 ListProxy 还是 DictProxy
- drake-r-package - 使用 r_make() 为 drake 使用专用环境