Swift의 Array와 List (Realm)를 비교하고 변환하는 방법
소개
메모 앱에 여러 태그를 연결하는 기능을 구현했을 때,
Swift의 Array와 List라는 유형이 각각 다른 역할임을 알지 못했기 때문에,
각각의 역할과 변환 방법에 대해 간결하게 정리하려고 합니다!
환경
Array와 List의 차이
Array도 List도 복수 요소를 취급한다는 점에서는 공통입니다만
Array는 Swift에서 배열로 사용되는 형식입니다.
List는 "RealmSwift"라는 Realm을 취급하기 위한 라이브러리로 취급할 수 있는 형태입니다.
List형과 Array형을 구분한다
이번에는 ViewController에서 List<Tag>
를 처리하려고했는데,
「List란 어떤 타입은 정의되어 있지 않아!」
그리고 화가 나서 Array<Tag>
로 변경했습니다.
그렇다면 이번에는 Model→Realm으로 변환할 수 없어 nil
가 되어,
저장되지 않는 이벤트가 발생했습니다!
nil이 되어도 에러가 되지 않고 단지 DB에 값이 들어가지 않으므로 요주의
그러므로
로직은 Array<Tag>
데이터 저장시는 List<Tag>
로 변환한다는 구현으로 대응했습니다.
이미지 다이어그램
Array<=>List 변환 방법
Array→List
Array에서 List로 변환 할 때 Model에서 List<Object>
를 지정하고,append(objectsIn:)
를 사용하면 List
로 Realm에 넣을 수 있었습니다.
모델
import Foundation
import RealmSwift
class Memo: RObject {
@objc dynamic var title : String = ""
@objc dynamic var content : String = ""
@objc dynamic var createdDate : Date = NSDate() as Date
@objc dynamic var updatedDate : Date = NSDate() as Date
var tags = List<Tag>() // ここをList型にする
}
class Tag: Object {
@objc dynamic var tagName = ""
var memos: LinkingObjects<Memo> {
return LinkingObjects(fromType: Memo.self, property: "tags")
}
}
ViewController
import UIKit
import RealmSwift
class MemoTableViewController: UITableViewController {
// 一部抜粋
let memoModel = Memo()
let realm = try! Realm()
try! realm.write {
memoModel.title = memo
memoModel.content = memo
memoModel.tags.removeAll()
memoModel.tags.append(objectsIn: tags) // Listに追加
// 一部省略
}
}
List→Array
List를 Array로 변경할 때는 Array()
로 변환해 주면 괜찮습니다!
또한 Array型
에 넣을 때는 append(contentsOf:)
를 사용하는 것 같습니다.
ListToArraylet testList = List<Tag>() //List型
var testArray = Array<Any>() // Array型
testArray.append(contentsOf: Array(testList)) // Array()でListを変換
요약
이번은 List와 Array를 변환했습니다만,
RealmSwift를 import하고 사용하는 방법도 있을지도 모릅니다.
Java라면, 배열도 List도 존재하기 때문에, Swift도 비슷한 느낌일까 생각
List가 RealmSwift의 유형이라는 것을 깨닫는 데 시간이 걸렸기 때문에,
자바에서 Swift 들어가는 사람은 조심하십시오 ^^;
Array로 Realm에 넣으려고하면 nil이 들어가 처리가 떨어지지 않고
저장에 실패하는 것도주의 포인트였습니다!
*실장 베이스로 깨달은 것을 정리했으므로, 만약 실수나 지적이 있는 경우는
확인 · 수정하므로 코멘트로 알려주십시오 mm
Reference
이 문제에 관하여(Swift의 Array와 List (Realm)를 비교하고 변환하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/dieKn/items/7df1f7992f9f04661c51
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이번에는 ViewController에서
List<Tag>
를 처리하려고했는데,「List란 어떤 타입은 정의되어 있지 않아!」
그리고 화가 나서
Array<Tag>
로 변경했습니다.그렇다면 이번에는 Model→Realm으로 변환할 수 없어
nil
가 되어,저장되지 않는 이벤트가 발생했습니다!
nil이 되어도 에러가 되지 않고 단지 DB에 값이 들어가지 않으므로 요주의
그러므로
로직은
Array<Tag>
데이터 저장시는 List<Tag>
로 변환한다는 구현으로 대응했습니다.이미지 다이어그램
Array<=>List 변환 방법
Array→List
Array에서 List로 변환 할 때 Model에서 List<Object>
를 지정하고,append(objectsIn:)
를 사용하면 List
로 Realm에 넣을 수 있었습니다.
모델
import Foundation
import RealmSwift
class Memo: RObject {
@objc dynamic var title : String = ""
@objc dynamic var content : String = ""
@objc dynamic var createdDate : Date = NSDate() as Date
@objc dynamic var updatedDate : Date = NSDate() as Date
var tags = List<Tag>() // ここをList型にする
}
class Tag: Object {
@objc dynamic var tagName = ""
var memos: LinkingObjects<Memo> {
return LinkingObjects(fromType: Memo.self, property: "tags")
}
}
ViewController
import UIKit
import RealmSwift
class MemoTableViewController: UITableViewController {
// 一部抜粋
let memoModel = Memo()
let realm = try! Realm()
try! realm.write {
memoModel.title = memo
memoModel.content = memo
memoModel.tags.removeAll()
memoModel.tags.append(objectsIn: tags) // Listに追加
// 一部省略
}
}
List→Array
List를 Array로 변경할 때는 Array()
로 변환해 주면 괜찮습니다!
또한 Array型
에 넣을 때는 append(contentsOf:)
를 사용하는 것 같습니다.
ListToArraylet testList = List<Tag>() //List型
var testArray = Array<Any>() // Array型
testArray.append(contentsOf: Array(testList)) // Array()でListを変換
요약
이번은 List와 Array를 변환했습니다만,
RealmSwift를 import하고 사용하는 방법도 있을지도 모릅니다.
Java라면, 배열도 List도 존재하기 때문에, Swift도 비슷한 느낌일까 생각
List가 RealmSwift의 유형이라는 것을 깨닫는 데 시간이 걸렸기 때문에,
자바에서 Swift 들어가는 사람은 조심하십시오 ^^;
Array로 Realm에 넣으려고하면 nil이 들어가 처리가 떨어지지 않고
저장에 실패하는 것도주의 포인트였습니다!
*실장 베이스로 깨달은 것을 정리했으므로, 만약 실수나 지적이 있는 경우는
확인 · 수정하므로 코멘트로 알려주십시오 mm
Reference
이 문제에 관하여(Swift의 Array와 List (Realm)를 비교하고 변환하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/dieKn/items/7df1f7992f9f04661c51
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import Foundation
import RealmSwift
class Memo: RObject {
@objc dynamic var title : String = ""
@objc dynamic var content : String = ""
@objc dynamic var createdDate : Date = NSDate() as Date
@objc dynamic var updatedDate : Date = NSDate() as Date
var tags = List<Tag>() // ここをList型にする
}
class Tag: Object {
@objc dynamic var tagName = ""
var memos: LinkingObjects<Memo> {
return LinkingObjects(fromType: Memo.self, property: "tags")
}
}
import UIKit
import RealmSwift
class MemoTableViewController: UITableViewController {
// 一部抜粋
let memoModel = Memo()
let realm = try! Realm()
try! realm.write {
memoModel.title = memo
memoModel.content = memo
memoModel.tags.removeAll()
memoModel.tags.append(objectsIn: tags) // Listに追加
// 一部省略
}
}
let testList = List<Tag>() //List型
var testArray = Array<Any>() // Array型
testArray.append(contentsOf: Array(testList)) // Array()でListを変換
이번은 List와 Array를 변환했습니다만,
RealmSwift를 import하고 사용하는 방법도 있을지도 모릅니다.
Java라면, 배열도 List도 존재하기 때문에, Swift도 비슷한 느낌일까 생각
List가 RealmSwift의 유형이라는 것을 깨닫는 데 시간이 걸렸기 때문에,
자바에서 Swift 들어가는 사람은 조심하십시오 ^^;
Array로 Realm에 넣으려고하면 nil이 들어가 처리가 떨어지지 않고
저장에 실패하는 것도주의 포인트였습니다!
*실장 베이스로 깨달은 것을 정리했으므로, 만약 실수나 지적이 있는 경우는
확인 · 수정하므로 코멘트로 알려주십시오 mm
Reference
이 문제에 관하여(Swift의 Array와 List (Realm)를 비교하고 변환하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/dieKn/items/7df1f7992f9f04661c51텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)