2016-07-27 177 views
1

我目前正在創建使用「定時回報」,只有持續的特定時間內的應用程序,我是新來的斯威夫特使用過濾器,當前的目標,我需要滿足:如何過濾JSON數據,然後枚舉過濾的數據?

  1. 顯示的獎勵,如果redemptionDate是NULL

  2. 隱藏的獎勵,如果currentDateTime> = redemptiondate + redeemTimeLimit(這些是JSON對象)

  3. 顯示獎勵和顯示倒數計時器如果currentDateTime < redemptiondate + redeemTimeLimit

  4. 倒計時量redemptiondate + redeemTimeLimit和currentDateTime

這是到目前爲止我的代碼,我碰到一對夫婦崩潰之間的區別,筆記中的代碼。我也編號,我嘗試的領域並符合上述條件:

var rewardsArray : [MemberRewardsInfo] = []//MemberRewarsInfo is a JSON Object custom class 
    var timeFilteredRewardsArray : [MemberRewardsInfo] = [] 

RewardManager.sharedInstance.updateRewards({ rewards in 

self.timeFilteredRewardsArray = rewards 


    //.1 
    self.timeFilteredRewardsArray = self.timeFilteredRewardsArray.filter ({$0.redemptionDate == nil}) 


for filteredReward in self.timeFilteredRewardsArray { 


    let Date = NSDate() 
    let df = NSDateFormatter() 
    df.timeZone = NSTimeZone(forSecondsFromGMT: 0) 
    df.dateFormat = "MM-dd-yyyy" 
    let currentDate = df.stringFromDate(Date) 

    //.2 
    if currentDate >= filteredReward.redemptionDate! + filteredReward.redeemTimeLimit! { 

      //remove current reward from array, not sure how to do this 

    //.3 
    } else if currentDate < filteredReward.redemptionDate! + filteredReward.redeemTimeLimit!{ 

    //.4 
    var countdownTimer = (filteredReward.redemptionDate! + filteredReward.redeemTimeLimit!) - currentDate 

     //error occurs here: "Binary operator '-' cannot be applied to two 'String' operands" 
    } 
} 



    self.rewardsArray = self.timeFilteredRewardsArray 
    self.rewardsTableView.reloadData() 

    }) 
+1

爲什麼會你過濾你的數組......然後將它分配給當前數組,而你正在枚舉該數組......你的代碼看起來嚴重錯誤從一開始 – Tj3n

+0

我認爲是這樣,你推薦一種好辦法來處理這種情況? – SwiftyJD

+0

是否有你想過濾而不是構建的原因?即爲什麼不創建一個空數組,然後枚舉「獎勵」,將符合條件的項目添加到您創建的數組中? – ghostatron

回答

0

我建議你使用這個庫SwiftyJSON。 Swift對類型非常嚴格,JSON不關心類型。此外,鏈接變得非常混亂,SwiftyJSON修復了所有這些。這將幫助你專注於過濾器,因爲你過濾你的數組,然後針對相同的陣列分配給它...

簡單的例子,因爲我不知道你的JSON結構:

let json = JSON(data: dataFromNetworking) 
if let userName = json[0]["data"]["date"].string { 
    //convert to date and do your filters 
}