2017-09-24 146 views
0
struct Data { 
    var DT: Date? 
    var D1: Double 
    var D2: Double 
    var D3: Double 
    var D4: Double 
    var I1: Int 
} 

var data = [Data]() 
var format = "yyyyMMdd;%f;%f;%f;%f;%d" 
var test = "20170924;1.1;2.2;3.3;4.4;100" 

使用format將數值從test設置爲data的最簡單方法是什麼? ps:格式分隔符可以是「,」或其他。如何從格式化的字符串填充結構對象?

+0

爲了使它更清楚,您可以加入預期的結果的例子嗎? –

+0

我想要數據[0] .DT == 2017-09-24 00:00:00 UTC data [0] .D1 == 1.1 ...和data [0] .I1 == 100 – Anton

回答

1

你可以使用下面的函數來獲得一個充滿Data對象:

func getDesiredData(formattedString: String, dateFormat: String, separator: String) -> Data? { 
    let array = formattedString.components(separatedBy: separator) 

    //print(array.count) 

    if array.count < 6 { 
     // something went wrong seprating the formatted string 
     return nil 
    } 

    guard let d1 = Double(array[1]), let d2 = Double(array[2]), let d3 = Double(array[3]), let d4 = Double(array[4]), let i1 = Int(array[5]) else { 
     // something went wrong when converting string to doubles/int 
     return nil 
    } 

    var formatter = DateFormatter() 
    formatter.dateFormat = dateFormat 
    let date = formatter.date(from: array[0]) 

    return Data(DT: date, D1: d1, D2: d2, D3: d3, D4: d4, I1: i1) 
} 

正如你可以在函數簽名看,你可以自由添加所需:

  • formattedString,爲例如:「yyyyMMdd;%f;%f;%f;%f;%d」。
  • dateFormat,例如:「yyyyMMdd」。
  • separator,例如:「,」或「;」。

輸出:

// happy case ";": 
let test1 = getDesiredData(formattedString: "20170924;1.1;2.2;3.3;4.4;100", dateFormat: "yyyyMMdd", separator: ";") 
dump(test1) 

// happy case ",": 
let test2 = getDesiredData(formattedString: "20170924,1.1,2.2,3.3,4.4,100", dateFormat: "yyyyMMdd", separator: ",") 
dump(test2) 

// wrong format: 
let test3 = getDesiredData(formattedString: "wrong;format;goes;here", dateFormat: "yyyyMMdd", separator: ";") 
dump(test3) // nil 

// wrong separator: 
let test4 = getDesiredData(formattedString: "20170924;1.1;2.2;3.3;4.4;100", dateFormat: "yyyyMMdd", separator: "!") 
dump(test4) // nil 
+0

謝謝。我知道如何做到這一點與組件分離和拆分。但是,它可以迅速使用格式?例如,var str = String(format:「yyyyMMdd;%f;%f;%f;%f;%d」,data [0],...)會給我一個使用格式的字符串,是否有可能恰恰相反? – Anton

+0

那麼,這些問題可能與要求的內容有關:https://stackoverflow.com/questions/24074479/how-to-create-a-string-with-format https://stackoverflow.com/questions/24051314 /精確字符串格式說明符在迅速,但我不敢肯定,如果他們將是您尋找什麼的解決方案... –