swift - sort an array of objects by their optional boolean property without force unwrapping

前端 未结 6 592
旧巷少年郎
旧巷少年郎 2021-01-02 00:02

I can sort this array of store objects by their \'flagship\' boolean property, but how can I safely unwrap the \'flagship\' property first?

le         


        
6条回答
  •  醉酒成梦
    2021-01-02 00:53

    As mr.Fixit pointed out on a comment, the accepted answer doesn't fully work because it doesn't take care of nils. Here is the correct answer with an extra string sample.

    SWIFT 4

    for a boolean sorting

     let flagshipStores = self.stores.sorted(by: {
        guard let flagship0 = $0.flagship, let flagship1 = $1.flagship else { 
    
           if $0.flagship == nil && $1.flagship == nil || $0.flagship != nil &&  $1.flagship == nil{
    
              return true
    
           }
           else {
    
              return false
    
           }
        } 
    
        return ($0.flagship == $1.flagship || $0.flagship == true && $1.flagship == false ? true : false)
    
    
     })
    

    for strings comparison sorting

     let stores = self.stores.sorted(by: {
        guard let store0 = $0.store, let store1 = $1.store else { 
    
           if $0.store == nil && $1.store == nil || $0.store != nil &&  $1.store == nil{
    
              return true
    
           }
           else {
    
              return false
    
           }
        } 
    
        return ( ($0.store)?.localizedStandardCompare($1.store!) == ComparisonResult.orderedAscending )
    
     })
    

提交回复
热议问题