无法转换类型&#39; Int&#39;的返回表达式返回类型&#39; Property <int>

时间:2018-05-08 12:30:11

标签: swift xcode mvvm

我试图在测试项目中使用Bond来实现MVVM模式。

这个想法很简单:

  1. 定义viewModel随后使用的抽象。
  2. 从这个抽象中创建一个具体的类型。
  3. 在viewModel中注入此具体类型。
  4. 到目前为止,这是我的代码:

    // 1.
    protocol Commentable {
        var id: Int { get }
        var name: String { get }
        var body: String { get }
    }
    
    // 2.
    struct Comment: Commentable {
        var id: Int
        var name: String
        var body: String
    }
    
    // 3.
    struct CommentViewModel {
    
        private let comment: Commentable
    
        init(comment: Commentable) {
            self.comment = comment
        }
    
        public var id: Observable<Int> {
            return self.comment.id
        }
    }
    

    当我尝试return self.comment.id时,Xcode会显示以下错误:

      

    无法转换类型&#39; Int&#39;的返回表达式返回类型   &#39;属性

    这是有道理的 - comment.idIntself.idObservable<Int>。如何使其工作,因为我不想将Comment类型中的属性定义为Observable

1 个答案:

答案 0 :(得分:0)

修正了它 - 只需更改语法:

struct CommentViewModel {

    private let comment: Observable<Commentable>

    init(comment: Commentable) {
        self.comment = Observable(comment)
    }

    public var id: Observable<Int> {
        return Observable(comment.value.id)
    }
}