2017-12-16 13 views
0

나는 2 영역의 목록Swift에서 렐름 목록을 반환하는 방법은 무엇입니까?

을하고 난 그래서 jQuery과에 그들 중 하나를 표시하도록 선택할 수 있습니다 healper 기능 를 만들기 위해 노력하고있어

내 모델이

public class RealmModel : Object { 

    public var arrayList1 = List<realmList1>() 
    public var arrayList2 = List<realmList2>() 


    func ChooseList<T> (cehck : Bool) -> List<T> { 

     if cehck == true { 
      return arrayList1 as! List<T> 
     } else if cehck == false { 
      return arrayList2 as! List<T> 

     } 
     return arrayList1 as! List<T> 
    } 


} 

과 같은

일반 유형을 사용하려고 시도하지만 행운이 없음

선택 목록 나는 그것을 할 방법을 몰라, 나는이 경우

+0

정확히 무엇을 하려는지 명확하지 않지만 디자인을 재고하고 싶을 수 있습니다. 그대로, '기본'RealmModel에는 공개적으로 액세스 할 수있는 Realm 객체의 두 목록이 있으며 동시에 두 배열 중 하나를 반환하는 함수가 있습니다. 본질적으로 중복 기능. Realm에서 RealmModel 객체를 검색하면 배열에 직접 액세스 할 수 있습니다. someArray = aRealmModel.arrayList1을 보자. 이에 따라 arrayList1 또는 arrayList2를 tableView 데이터 소스로 사용할 수 있습니다. /일반 유형을 사용하려는 이유를 명확히 할 수 있습니까? – Jay

+0

아이디어는 내 코드를 복제하고 싶지 않습니다!, 지금 당신이 언급 한대로 정확히 내 코드를 복제합니다! 두 목록 모두 동일한 Tableview에 표시되므로 사용자가 사용할 작업의 종류에 따라 전환해야하므로 올바른 내용을 표시 할 수 있도록 먼저 확인해야합니다. 내가 왜 이런 식으로해야하는지 명확 해 졌다고 생각한다. – X901

+0

BTW 내가 사용하는 것이 옳다고 생각했기 때문에 나는 Generic Type을 사용했다. – X901

답변

0

나는 거처럼 chooseList 방법을 쓸 수 있습니다 여기에 제네릭을 필요가 있다고 생각하지 말아

public var arrayList1 : DataType = List<realmList1>() 
public var arrayList2 : DataType = List<realmList2>() 


func ChooseList<T> (cehck : Bool) -> List<T>? { 

    if cehck == true { 
     return arrayList1 as? List<T> 
    } else if cehck == false { 
     return arrayList2 as? List<T> 

    } 
    return nil 
} 
0

을 보관하기 위해 노력하고있어 보관하는 또 다른 방법이 있는지, arrayList1이 SomeOtherType입니다 오류

Generic parameter 'T' could not be inferred 

을 얻었다. 목록은 그 유형이 아닙니다. 캐스트는 위험합니다. 항상 같이 사용 하시겠습니까?

이 하나를 시도

, 당신의 realmList1 및 realmList2는 Object에서 상속하는 경우이

func ChooseList(cehck : Bool) -> List<Object> { 

    if cehck == true { 
     return arrayList1 as! List<realmList1> // or just return arrayList1 
    } else if cehck == false { 
     return arrayList2 as! List<realmList2> // or just return arrayList2 

    } 
    return arrayList1 as! List<realmList1> 
} 
0

대체 솔루션을 제안하십시오. 이것은 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) 
    } 
된다
+0

이것은 내가 시도 프리스트 일이었다 내가 가지고 오류 : 유형의 반환 식을 변환 할 수 없습니다 '목록 '형식을 반환하는 '목록 ' – X901