swift - 如何在 Swift 中返回 Realm 列表?

标签 swift realm realm-mobile-platform

我有 2 个 Realm 列表

我正在尝试使治疗功能 所以我可以在它们之间进行选择以在 UITableview 上显示其中一个

我的模型看起来像这样

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>
    }


}

我正在尝试使用通用类型 但运气不好

当我尝试使用函数ChooseList时,出现错误

Generic parameter 'T' could not be inferred

我不知道该怎么做,以及是否有其他方法来存档我要存档的内容

最佳答案

我会建议一个替代解决方案。这是 macOS,但与 iOS 非常相似,它实际上只是提供另一种选择。

假设我们有一个 tableView,并希望根据用户的选择来切换 tableView 中列出的内容。

给定两个 Realm 对象 RedGrape、WhiteGrape

然后是一个包含这两个列表的类,称为 Grape。这与原始问题中的内容类似,但我想在我们的列表中使用定义更明确的项目。

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
    }
}

从这里您可以在 Grape 类中实现更多决策代码:

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)
    }

关于swift - 如何在 Swift 中返回 Realm 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47845656/

相关文章:

ios - 设置 UIView 的颜色强度

swift - 3D Touch 和 SpriteKit

swift - 为什么我的 Swift Process() 启动路径会输出 `launch path not accessible` ?

ios - 一次性将所有 Realm 对象转换为字典

ios - TableView 估计 ios 8 中的行高

ios - Realm事务完成后如何触发KVO?

ios - 更新具有主键的 Realm 对象

android - 为什么我的 Realm 回收 View 不显示任何数据?

swift3 - 在realm-swift中添加新的realm对象时是否需要迁移?

realm - Realm Swift 版本 2.0.4 中的同步身份验证