2017-02-07 2 views
1

Я новичок быстры, модернизировала свой код быстрого 3.Swift ошибка 3 обновления --execute плохого код

Swift 2.3 кода следующим образом:

func sectionTite() { 
     let keyArray:NSArray = self.messageDictionary.allKeys 
     let sortedArray = keyArray.sortedArrayUsingComparator { (dateString1: AnyObject, dateString2: AnyObject) -> NSComparisonResult in 
      let d1:NSDate = NSDate.dateFromString(dateString1 as! String, fromFormat: NSDate.DateFormat.KYYYY_MM_DD) 
      let d2: NSDate = NSDate.dateFromString(dateString2 as! String, fromFormat: NSDate.DateFormat.KYYYY_MM_DD) 
      return (d1).compare(d2) 
     } 
     self.sectionArray = sortedArray 
    } 

Swift 3,0

func sectionTite() { 
     let keyArray:NSArray = self.messageDictionary.allKeys as NSArray 
     let sortedArray = keyArray.sortedArray (comparator: { (dateString1: AnyObject, dateString2: AnyObject) -> ComparisonResult in 
      let d1:Date = Date.dateFromString(dateString1 as! NSString , fromFormat: Date.DateFormat.KYYYY_MM_DD as NSString) 
      print(d1) 
      let d2: Date = Date.dateFromString(dateString2 as! NSString, fromFormat: Date.DateFormat.KYYYY_MM_DD as NSString) 
      return (d1).compare(d2) 
     } as! (Any, Any) -> ComparisonResult) 
     self.sectionArray = sortedArray as NSArray 
    } 

Вышеупомянутый код разбил состояния EXC_breakpoint (code1, subcode ...), в нем не указывается причина сбоя. keyArray состоит из проблемы с элементом date.Below.

let keyArray:NSArray = self.messageDictionary.allKeys as NSArray 

ответ

2

Использовать собственный быстрый тип Array и Dictionary вместо NSArray и NSDictionary. Так объявить sectionArray как [String] вместо NSArray

var sectionArray = [String]() 

Now сортировать свои словарные ключи, как таким образом.

if let dic = self.messageDictionary as? [String:Any] { 
    let keys = Array(dic.keys) as [String] 
    let dateForamatter = DateFormatter() 
    dateForamatter.dateFormat = Date.DateFormat.KYYYY_MM_DD //Set Your dateFormat 
    self.sectionArray = keys.sorted(by: { (str1, str2) -> Bool in 
     let date1 = dateForamatter.date(from: str1)! //I have force wrapped 
     let date2 = dateForamatter.date(from: str2)! 
     return date1 < date2 
    }) 
} 
+0

Вы попробуйте решение, это работает сейчас? –

+0

В нем указывается ошибка «Аргумент, переданный вызову, который не принимает аргументов», также мне нужно изменить лот в классе self.sectionArray = keys.sorted (by: {(str1, str2) -> Bool in Эта строка бросает исключение. –

+0

@SinsonAntony вы добавили тот же код, можете ли вы изменить свой вопрос с помощью своей попытки, потому что этот код отлично построен в моем Xcode 8, Swift 3 без каких-либо ошибок. –

0
let keyArray:NSArray = self.messageDictionary.allKeys as NSArray 
     let dateForamatter = DateFormatter() 
        dateForamatter.dateFormat = Date.DateFormat.KYYYY_MM_DD //Set Your dateFormat 
        self.sectionArray = keyArray.sorted(by: { (str1, str2) -> Bool in 
         let date1 = dateForamatter.date(from: str1 as! String)! 
         let date2 = dateForamatter.date(from: str2 as! String)! 
         return date1 < date2 
        }) as NSArray 

     self.sectionArray = keyArray as NSArray 
    } 
Смежные вопросы