2017-09-24 1 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" 

test에서 data까지의 값을 입력하는 가장 쉬운 방법은 format입니다. ps : 형식의 구분 기호는 ","또는 다른 형식 일 수 있습니다.형식화 된 문자열에서 struct 객체를 채우는 방법은 무엇입니까?

+0

당신은 예상 된 결과의 예를 추가 할 수 있습니다, 더 명확하게하려면? –

+0

데이터 [0] .DT == 2017-09-24 00:00:00 UTC 데이터 [0] .D1 == 1.1 ... 및 데이터 [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 (형식 : "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/precision-string-format-specifier-in-swift하지만 당신이 찾고있는 것을위한 솔루션이 될지 확신 할 수 없다. –

관련 문제