대체 솔루션을 제안하십시오. 이것은 macOS이지만 iOS와 매우 유사하며 다른 옵션을 제공하기 만하면됩니다.
우리는 tableView가 있고 사용자가 무엇을 선택했는지에 따라 tableView에 나열된 것을 전환하려고한다고 가정합니다.
두 영역이 RedGrape,
WhiteGrape
와 포도라는 사람들의 모두의 목록을 포함하고 다음 클래스 개체를 지정합니다. 이것은 원래 질문에있는 것과 유사하지만 우리 목록에서 사용하기에 더 잘 정의 된 항목을 사용하고 싶었습니다.
class RedGrape: Object {
@objc dynamic var grapeName = ""
}
class WhiteGrape: Object {
@objc dynamic var grapeName = ""
}
class Grape: Object {
let reds = List<RedGrape>()
let whites = List<WhiteGrape>()
}
다음의 ViewController 내에있는 tableView를 처리하는 클래스는,이주의는 개념이다 :
class ViewController: NSViewController, NSTableViewDelegate, NSTableViewDataSource {
@IBOutlet weak var myTableView: NSTableView!
var self.userSelection = 0 //changed by user: 0 for red, 1 for white
var myGrape = //set up the Grape Object var from Realm
override func viewDidLoad() {
super.viewDidLoad()
self.userSelection = 0
self.myTableView.delegate = self
self.myTableView.dataSource = self
self.myTableView.reloadData()
}
func numberOfRows(in tableView: NSTableView) -> Int {
if self.userSelection == 0 {
return self.myGrape.reds.count
} else {
return self.myGrape.white.count
}
}
func tableView(_ tableView: NSTableView,
viewFor tableColumn: NSTableColumn?,
row: Int) -> NSView? {
var name = ""
if self.userSelection == 0 {
name = self.myGrape.reds[row].grapeName
} else {
name = self.myGrape.whites[row].grapeName
}
let cellIdentifier = NSUserInterfaceItemIdentifier(rawValue:"MyCellView")
if let cellView = self.myTableView.makeView(withIdentifier: cellIdentifier,
owner: nil) as? NSTableCellView {
cellView.textField?.stringValue = name
return cellView
}
return nil
}
}
여기에서 당신은 포도 클래스 내에서 더 많은 의사 결정 코드를 구현할 수 :
class Grape: Object {
let reds = List<RedGrape>()
let whites = List<WhiteGrape>()
func rowCountFor(selection: Int) -> Int {
if selection == 0 {
return self.Grape.reds.count
} else {
return self.Grape.white.count
}
func nameFor(selection: Int, forRow: Int) -> String {
if selection == 0 {
return self.reds[forRow]
} else {
return self.whites[forRow]
}
}
}
은 다음있는 tableView numberOfRows는
func numberOfRows(in tableView: NSTableView) -> Int {
self.myGrape.rowCountFor(selection: self.userSelection)
}
된다
정확히 무엇을 하려는지 명확하지 않지만 디자인을 재고하고 싶을 수 있습니다. 그대로, '기본'RealmModel에는 공개적으로 액세스 할 수있는 Realm 객체의 두 목록이 있으며 동시에 두 배열 중 하나를 반환하는 함수가 있습니다. 본질적으로 중복 기능. Realm에서 RealmModel 객체를 검색하면 배열에 직접 액세스 할 수 있습니다. someArray = aRealmModel.arrayList1을 보자. 이에 따라 arrayList1 또는 arrayList2를 tableView 데이터 소스로 사용할 수 있습니다./일반 유형을 사용하려는 이유를 명확히 할 수 있습니까? –
Jay
아이디어는 내 코드를 복제하고 싶지 않습니다!, 지금 당신이 언급 한대로 정확히 내 코드를 복제합니다! 두 목록 모두 동일한 Tableview에 표시되므로 사용자가 사용할 작업의 종류에 따라 전환해야하므로 올바른 내용을 표시 할 수 있도록 먼저 확인해야합니다. 내가 왜 이런 식으로해야하는지 명확 해 졌다고 생각한다. – X901
BTW 내가 사용하는 것이 옳다고 생각했기 때문에 나는 Generic Type을 사용했다. – X901