Swift实例与类方法以及类继承

时间:2017-11-24 18:12:37

标签: ruby swift inheritance class-method instance-methods

我有疑问。来自ruby,我已经习惯了一种语法,我可以做到以下几点。

client = NewsAPI::Client.new(
  url:        'https://www.newshost.com/api/',
  http_token: '1234567890',
)
newsEntry = client.news.new(
  title: 'Some title',
  text: 'Some text',
);
newsEntry.save

或者

news = client.news.all

这将为我提供所有可用新闻的列表。

我尝试使用Swift类和实例方法构建类似的东西。这适用于实例方法,但我不知道如何实现/访问类功能。像“列表”或“搜索”。 我创建了一个在XCode游乐场中工作的小例子。

所以基本上我有一个客户端类,它应该为我提供了几个“对象”。在这种情况下,新闻“对象”。这个对象应该为我提供类似于上面的ruby代码的东西。请参阅下面的代码。

我的问题: 一世) 我可以简单地将这些函数添加到我的基类中,并在我的子类中覆盖它们。这会给我同样的行为。即使我混淆了类和实例方法。 (我猜)从“最佳实践/设计”的角度来看,这是否可以?

II) 是否有更清洁/更好的方式来实现我想要的“快速方式”?

非常感谢 约翰内斯

class Client{
    let token: String
    public init(token: String) {
        self.token = token
    }
    public var newsObject: News {
        return News()
    }
}
class Ressource {

    class func list() {
        print("this is a news list")
    }
    class func search() {
        print("this is a news search result")
    }

    func start() {
        print("Hello")
    }
}

class News: Ressource{
    override func start() {
        print("Hello from Sub Class")
    }
}

let news = Client(token: "123456").newsObject
news.start()

1 个答案:

答案 0 :(得分:1)

您只需要使用类类型本身来访问类方法。您无法通过实例访问它们,因为类方法的重点是它们与类型的实例无关。

您可以访问列表/搜索类方法,如下所示:

News.list()
News.search()