二进制运算符'<'不能。适用于两个'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 
} 

enter image description here

这里的模式,我做的事:

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"] 
    } 
} 
+5

这是Swift,使用Swift集合。不要使用'NSArray'或'NSDictionary'。换句话说,重写代码以使用正确的数据类型,这些错误将消失。 – rmaddy

+3

并且不要在布尔值上使用'switch'语句...(使用'if') – nyg

+0

Bump @nyg的评论。没有理由在布尔值上进行“切换”。 –

你所得到的错误,Binary operator '<' cannot be applied to two 'Any?' operands因为你正试图比较两个值<不知道如何比较。

  • <是一个二元运算符
  • Any?是您试图比较

您可以考虑铸造s1.lastObjects2.lastObject的东西的对象的类型,如号码,这样他们可以相比较。

+0

Thx为您提供帮助,实际上s1.lastObject和s2.lastObject在小数组中是Int,但swift不知道它们是什么类型。我该怎么办? – Jack

+0

你可以使用一个叫做“Casting”的东西强制一个类型到一个对象。 'var x:Any? = 2 print(type(of:x as!Int))' –