ruby - Swift 实例 vs 类方法加上类继承

标签 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 Playground 中运行的小示例。

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

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

二) 有没有更干净/更好的方法来实现我想要的“Swift 方式”?

非常感谢 约翰内斯

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

最佳答案

您只需要使用类类型本身来访问类方法。您不能通过实例访问它们,因为类方法的全部意义在于它们不与类型的实例相关联。

您可以像这样访问列表/搜索类方法:

News.list()
News.search()

关于ruby - Swift 实例 vs 类方法加上类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47478308/

相关文章:

Ruby,在变量名称中使用插值

没有所有必需的和方法定义的 Ruby 代码覆盖率?

Java:Android类和api包层次继承

ios - 从 Swift 访问 extern const struct

c# - 如何在继承自 SocketAsyncEventArgs 的类中实现 IDisposable 接口(interface)

c++ - 用提升精神解析继承的结构

ruby-on-rails - rake 路由错误 "Missing :action key on routes definition"

mysql - 如何让 Phusion Passenger、MySQL 和 Rails 在生产环境中良好运行

api - OAuthSwift- "No Such Module OAuthSwift"

xcode - 在 Xcode6 中将 Swift 文件导入其他 Swift 文件