如何在trait中定义隐式写入

时间:2016-11-02 12:13:49

标签: scala generics playframework-2.0

我有多个案例类代表DB中的值,用于ex用户,用于保存基于用户的属性,如名称/年龄/地址和CallLog,可以节省时间戳/ status_of_call

我想要实现的目标

我希望有一个辅助函数接受模型列表并检查列表是否为空然后返回“错误”,否则应该返回列表的json数组。

我的方法

我希望有一个特征在其中对某些模型进行分组,并且辅助方法将接受特征或它的列表以便检查或者可能具有实现特征的通用。

问题

由于隐式写入与模型类紧密耦合,编译器会在行Json.toJson(list)上抛出错误

我尝试过的事情 隐藏在trait中并得到递归类型错误

如果这听起来很傻,我就是scala noob原谅我 提前致谢

1 个答案:

答案 0 :(得分:2)

由于User,CallLog等将被不同地序列化,因此每个Writes [T]对于Model特征的每个实现都是不同的,因此Writes [Model]必须知道它试图序列化的实现。< / p>

因此不可能将它作为模型特征的一部分,因为在您定义它时,这些信息还不知道。

您的案例中的解决方法是在您的辅助函数范围内定义您的Writes [Model]。

你的帮助函数的实现可能是这样的:

//if else statement
if(UserDefaults.standard.bool(forKey: "HasLaunchedOnce"))
{
        // app already launched
        print("not first launch")
        anotherFunction()
}

//@ibaction (scrap this if you don't want the button)
@IBAction func openMap()
{
    print("openmap opened")
    anotherFunction()

}

//another function
func anotherFunction()
{
    performSegue(withIdentifier: "openMap", sender: nil)
}