2016-10-10 4 views
0

今日私はSwift 3言語に切り替えました。私は、イベントまでの時間の分と秒のカウントダウンを提供するアプリを作っています。以下のコードは、私のアプリに以下を表示します:swiftへのNSDateトランジションを使ったカウントダウン3

オプション(6)日オプション(59)分オプション(35)秒。

スウィフト2のカウントダウンはうまくいきましたが、スウィフト3に変換した後はオプションの数字が表示されました。 Swift 3での経験を持つ人は、この問題の解決策を知っていますか?

@IBAction func NextWeeklyButtonPressed(_ sender: AnyObject) { 
    let timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(printTimeWeeks), userInfo: nil, repeats: true) 
    timer.fire()   
    } 

    func printTimeWeeks() { 
    formatter.dateFormat = "MM/dd/yy hh:mm:ss a" 
    let startTime = Date() 
    let endTime = formatter.date(from: WeeklyDate.text!+" 12:00:00 a") 

    // WeeklyDate.text is a date in short style 

    let timeDifference = (userCalendar as NSCalendar).components(requestedComponent, from: startTime, to: endTime!, options: []) 

    WeeklyDateLabel.text = "\(timeDifference.day) Days \(timeDifference.minute) Minutes \(timeDifference.second) Seconds" 
} 
+2

つまり、 'timeDifference.day'はオプションです。 Swift 3のDateComponentsリファレンスを検索しましたか? –

答えて

0

append!フィールドへ

WeeklyDateLabel.text = "\(timeDifference.day!) Days \(timeDifference.minute!) Minutes \(timeDifference.second!) Seconds" 
+0

この場合(一般的に)オプションを強制的に展開するのは良い考えではないでしょう。 – ff10

+0

日または月...決してゼロになることはありません。私たちはサーバーから取得するオブジェクトに対してnilをチェックする必要があります。日または月は常に値を持つ;) –

0

オプションの文字列をアンラップする必要があります。

if let day = timeDifference.day, minute = timeDifference.minute, second = timeDifference.second { 
    WeeklyDateLabel.text = "\(timeDifference.day) Days \(timeDifference.minute) Minutes \(timeDifference.second) Seconds" 
} 
関連する問題