2017-05-08 30 views
0

我在這裏有代碼打印出數組。我添加了一個擴展文件來打印每個數組條目的時間和日期。但問題是擴展文件不刷新。所以第一個數組的日期和時間是打印在所有數組上的時間和日期。我只想在打印數組時匹配日期和時間。在不刷新時調用擴展文件(swift3)

enter image description here

enter image description here

import UIKit 
    class ViewController: UIViewController { 
    @IBOutlet var entry: UILabel! 
    var arrayOfInt = [Int]() 

     @IBOutlet var label: UITextField! 

    override func viewDidLoad() { 
    super.viewDidLoad() 

    } 

    @IBAction func enterScore(_ sender: Any) { 

    if let text = label.text { 
     if let number = Int(text){ 
      arrayOfInt.insert(number, at: 0) 

      entry.text = arrayOfInt.map { " \(Date.formattedNow) | \($0)" }.joined(separator:"\n\n") 

      }} 

     else { 
     entry.text = "Please Enter Number" 

     }}} 

extension Date { 
static var formattedNow: String = { 
    let now = Date() 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateFormat = "MM/dd/yyyy HH:mm:ss" 
    dateFormatter.timeZone = TimeZone(identifier: "EST") 
    return dateFormatter.string(from: now) 
}()} 

回答

0

如果你要存儲陣列中的每個數字的創建時間,您將需要使用的元組的排列和修改擴展名是一個實例方法並在自我而不是現在的日期工作。

var numbersWithCreationDates = [(Int,Date)]() 
numbersWithCreationDates.append((2,Date())) 
sleep(5) 
numbersWithCreationDates.append((5,Date())) 

extension Date { 
    var estDate: String { 
     let dateFormatter = DateFormatter() 
     dateFormatter.dateFormat = "MM/dd/yyyy HH:mm:ss" 
     dateFormatter.timeZone = TimeZone(identifier: "EST") 
     return dateFormatter.string(from: self) 
    } 
} 

for current in numbersWithCreationDates { 
    print("Date: \(current.1.estDate), number: \(current.0)") 
} 

以上代碼打印

Date: 05/09/2017 09:51:46, number: 2 
Date: 05/09/2017 09:51:51, number: 5 

睡眠5只需要在遊樂場的測試,你可以省略,在您的實際代碼。

+0

我試過了。錯誤消息狀態擴展可能包含未存儲的屬性。 –

+0

請顯示確切的錯誤消息,因爲這是一個計算屬性,哪些擴展名確實可以存儲。 –

+0

我在我的問題中添加了一張包含錯誤信息的圖片。我在這張圖片中所做的是從「static var formattedNow:String = {」 –