二进制运算符'<'不能。适用于两个'Any?'操作数
我尝试从Web请求数据,然后获得一个数组四次(它们是不同的),并试图将这四个数组放在一个大数组中。 问题是四个小阵列不在大阵列的正确位置。我认为是使用这个功能largeArray.sort使四个小孩在正确的位置。 这里是我的代码:二进制运算符'<'不能。适用于两个'Any?'操作数
for i in 0..<4{
Alamofire.request(homeUrl[i], method: .get, parameters: nil, encoding: JSONEncoding.default).responseJSON { (valueGot) in
switch valueGot.result.isSuccess{
case true:
let dataDict = valueGot.result.value as! NSDictionary
let interestDict = dataDict["interest"] as! NSDictionary
let issuesArray = interestDict["issues"] as! NSArray
let todayDict = issuesArray[0] as! NSDictionary
let articlesArray = todayDict["articles"] as! NSArray
self.nsmArray.removeAllObjects()
for oneDict in articlesArray{
let model:ArticleModel = Mapper<ArticleModel>().map(JSON: oneDict as! [String:Any])!
if model.cover != nil{
self.nsmArray.add(model)
}
}
self.nsmArray.add(i)
self.collectionNSMArray.add(self.nsmArray.mutableCopy()
self.allCollectionView?.reloadData()
case false:
print(valueGot.error ?? "404")
}
}
} //for循环结束
这里的错误:
collectionNSMArray.sort { (s1:NSMutableArray, s2:NSMutableArray) -> Bool in
return s1.lastObject < s2.lastObject
}
这里的模式,我做的事:
class ArticleModel: Mappable {
var title:String?
var snippet:String?
var cover:String?
var tags:[TagsType]?
var webUrl:String?
var appName:String?
var appIcon:String?
required init?(map: Map) {
mapping(map: map)
}
func mapping(map: Map) {
title <- map["title"]
snippet <- map["snippet"]
cover <- map["cover"]
tags <- map["tags"]
webUrl <- map["webUrl"]
appName <- map["appName"]
appIcon <- map["appIcon"]
}
}
class TagsType: Mappable {
var name:String?
required init?(map: Map) {
mapping(map: map)
}
func mapping(map: Map) {
name <- map["name"]
}
}
你所得到的错误,Binary operator '<' cannot be applied to two 'Any?' operands
因为你正试图比较两个值<
不知道如何比较。
-
<
是一个二元运算符 -
Any?
是您试图比较
您可以考虑铸造s1.lastObject
和s2.lastObject
的东西的对象的类型,如号码,这样他们可以相比较。
Thx为您提供帮助,实际上s1.lastObject和s2.lastObject在小数组中是Int,但swift不知道它们是什么类型。我该怎么办? – Jack
你可以使用一个叫做“Casting”的东西强制一个类型到一个对象。 'var x:Any? = 2 print(type(of:x as!Int))' –
这是Swift,使用Swift集合。不要使用'NSArray'或'NSDictionary'。换句话说,重写代码以使用正确的数据类型,这些错误将消失。 – rmaddy
并且不要在布尔值上使用'switch'语句...(使用'if') – nyg
Bump @nyg的评论。没有理由在布尔值上进行“切换”。 –