Swift 4.2怪异的-map-行为
发布时间:2020-12-14 04:40:01 所属栏目:百科 来源:网络整理
导读:我在 Swift 4.2中的集合上使用.map时遇到了一些麻烦. 以下是发生的事情: 我有一个声明如下的属性: var cbPerifList:[CBPeripheral]! 我写的代码后面: _ = cbPerifList.map { (perif) - Void in print(perif.identifier)} 编译器看起来很开心并且没有抱怨.
我在
Swift 4.2中的集合上使用.map时遇到了一些麻烦.
以下是发生的事情: 我有一个声明如下的属性: var cbPerifList:[CBPeripheral]! 我写的代码后面: _ = cbPerifList.map { (perif) -> Void in print(perif.identifier) } 编译器看起来很开心并且没有抱怨. 但是当我写道: _ = cbPerifList.map { (perif) -> Void in print(perif.identifier) print("HELLO") } 编译器通过显示此消息进行抱怨. Value of type '[CBPeripheral]' has no member 'identifier' 在代码行上:print(perif.identifier) 有人能解释一下这里发生了什么吗? >我不明白为什么添加这行代码会产生影响. 打印( “HELLO”) 解决方法
地图在Swift(以及其他地方)中的工作方式是它可以将输入从一种类型映射(更改)到另一种类型.因此,在您的情况下,您将在[CBPeripheral]上调用map,对于每个元素,map函数将返回另一个值.因此,如果标识符是String,那么最终会得到一个字符串数组.
这就是它应该如何运作. 然而:) 在您的情况下,您已经定义了映射函数 (perif) -> Void 这意味着您将运行数组并调用map,其函数不返回任何内容.意味着结果将是一个填充Void值的数组. 因此,正如其他人在评论中建议的那样,如果您只是想检查cbPerifList的内容,那么最好使用for循环,如此 for cbPerif in cbPerifList { print(cbPerif.identifier) } 但是,如果你有兴趣获得一系列CBPeripherals的名字,你可以做这样的事情 let names = cbPerifList.map { $0.identifier } 对上述内容的评论:要阅读更多关于我们如何才能写完{$0.name}的内容,请查看Swift文档中关于Closures的章节,或者this answer 希望对你有所帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |