gpt4 book ai didi

Swift 2.x 到 swift 3,XCode 报错 : Type of expression is ambiguous without more context

转载 作者:行者123 更新时间:2023-11-28 15:19:44 24 4
gpt4 key购买 nike

这是我的 swift 2.X 代码,它在 swift 3 上不再起作用:

var dictThemesNamesStyles=[String:[Int:Int]]()
self.styles=dictThemesNamesStyles
let keysArray:Array=Array(self.styles.keys)
let sortedKeysArray = keysArray.sorted(by:
{
(str1: NSObject, str2: NSObject) -> Bool in
return Int((str1 as! String))<Int((str2 as! String))
})
self.stylesLevel1Keys=sortedKeysArray
self.styleThemesPickerView.reloadAllComponents()

在线:“返回 Int((str1 as!String)) < Int((str2 as!String))”它提示错误:“表达式类型不明确,没有更多上下文”

我必须更改此代码中的哪些内容才能使其正常工作?非常感谢。

最佳答案

让我们逐行分析:

var dictThemesNamesStyles=[String:[Int:Int]]()
self.styles=dictThemesNamesStyles

好的,我们有一个字符串字典到整数字典。

let keysArray:Array=Array(self.styles.keys)

这条线有几个问题:

  1. 没有泛型参数的:Array声明。

  2. 类型声明是不必要的,因为类型系统已经知道这是一个 Array,因为您正在调用 Array 的初始化器。

  3. 不需要创建整个数组,因为我们只是将结果传递给 sorted,它已经存在于 keys 返回的集合中,它将返回一个 Array。因此,创建数组是我们应该避免的不必要的性能损失。

事实上,我会删除这一整行,并在下一行中将 keysArray 替换为 self.styles.keys:

let sortedKeysArray = self.styles.keys.sorted(by:

下一步:

{
(str1: NSObject, str2: NSObject) -> Bool in
return Int((str1 as! String))<Int((str2 as! String))

好的,我们这里有一些问题。

  1. str1str2 被声明为 NSObject,而实际上它们是 String

  2. 因此,as! String 强制转换是不必要的。

  3. Int(String) 返回一个 Optional,因此您需要考虑结果可能为 nil 的情况。我只是提供一个默认值;可能是 0,但如果您愿意,也可以使用 guard 语句来抛出错误。

一般来说,这里有很多冗长的内容。整个闭包实际上可以简洁地写成一行:

let sortedKeysArray = self.styles.keys.sorted { (Int($0) ?? 0) < (Int($1) ?? 0) }

无论如何,解决这些问题,您的代码就会编译通过。

关于Swift 2.x 到 swift 3,XCode 报错 : Type of expression is ambiguous without more context,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46226410/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com