2017-03-23 2 views
0

모든 데이터를 정수 배열에 저장해야합니다. 내가 스위프트 운동장에서 오전, 내가 스위프트 놀이터를 사용하고 있기 때문에전체 정수 배열을 저장하는 방법은 무엇입니까?

UserDefaults.standard.setValue(sugarArray, forKey: "sugarArray") 

내가 거라고 생각 savedSugarArray에 데이터를 배치하는

let savedSugarArray = [UserDefaults.standard.integer(forKey: "sugarArray")] 

이에 저장이 그들을 저장 UserDefaults를 사용하여 시도 너무 길기 때문에 핵심 데이터를 사용하지 마십시오. 이것을 할 또 다른 방법이 있습니까? 미리 감사드립니다.

+0

1. 첫 번째 코드 줄에 대괄호가 무엇입니까? 2. 왜 당신은 실수로'setValue (forKey :)'를 사용하여'UserDefaults'에서 객체를 저장합니까? 'set (forKey :)'를 사용하십시오. 3. 실제 질문은 무엇입니까? – rmaddy

+0

대괄호를 사용하여 유형 Int 배열로 만듭니다. 제 질문은 배열을 저장하여 앱을 종료하고 이전 항목의 데이터를 계속 사용할 수 있도록하는 방법입니다. – Johnd

+0

이미 배열을 저장할 코드가 있습니다. 그래서 문제가 무엇입니까 (제 1 의견에있는 문제 외에)? – rmaddy

답변

1

UserDefaults는 프로젝트에서와 같이 놀이터 (Xcode 8.2.1)에서 동일하게 작동하지 않습니다. 일반적으로, 사용하려는 다음

설정 :

let integerArray: [Int] = [1,2,3,4,5] 
UserDefaults.standard.set(integerArray, forKey: "sugarArray") 

가져 오기 : UserDefaults 단순히 이것을 복사, 놀이터에서 동일하게 작동하지 않는다는 것을 보여 그러나

if let integerArray = UserDefaults.standard.object(forKey: "sugarArray") as? [Int]{ 
     //good to go 
} 
else{ 
    //no object for key "sugarArray" or object couldn't be converted to [Int] 
} 

, 놀이터 :

let integerArray: [Int] = [1,2,3,4,5] 
UserDefaults.standard.set(integerArray, forKey: "sugarArray") 
if let integerArray = UserDefaults.standard.object(forKey: "sugarArray") as? [Int]{ 
    print("UserDefaults work in playground") 
} 
else{ 
    print("UserDefaults do not work in playground") 
} 
+0

그래서 if 문 다음에 무엇을 넣을 것입니다. 배열에 아무것도 보이지 않나요? – Johnd

+0

일반적으로 integerArray 객체를 사용합니다. 놀이터에서 UserDefaults를 사용하면 어떤 이점이 있습니까? 개념적으로 나에게 많은 의미를주지는 않습니다. – JB288

+0

경연 대회입니다. 스위프트 놀이터를 사용해야합니다. – Johnd

0

나는 확장 여기

정말 도움이 될 수 있다고 생각
extension UserDefaults { 
    open func set(_ intArray: [Int], forKey defaultName: String) { 
     let array: NSArray = intArray as NSArray 
     set(array, forKey: defaultName) 
    } 

    func intArray(forKey defaultName: String) -> [Int] { 
     var result: [Int] = [] 

     let found = value(forKey: defaultName) as? NSArray ?? [] 

     found.forEach { 
     guard let item = $0 as? Int else { 
      return 
     } 
     result.append(item) 
     } 

     return result 
    } 
} 

사용법 :

UserDefaults.standard.set([1,2,3,4,5], forKey: "sugarArray") 
UserDefaults.standard.synchronize() 

let sugarArray = UserDefaults.standard.intArray(forKey: "sugarArray") 

리틀 설명

Int의 배열은 우리가 객체를 얻을 배열을 얻기 위해 UserDefaults

NSArray의 객체로 변환 한 후 저장 그리고 그것을 구문 분석하려고 시도 NSArray 그러면 우리는 발견 된 배열의 각 항목을 Int

관련 문제