2017-11-24 9 views
0

質問があります。私は次のことができる構文に慣れています。私にすべての利用可能なニュースのリストを与えるだろうSwiftインスタンスとクラスメソッドとクラス継承

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プレイグラウンドで動作する小さなサンプルを作成しました。

私は基本的に私にいくつかの "オブジェクト"を提供するはずのクライアントクラスを持っています。この場合ニュース "オブジェクト"です。このオブジェクトは、上記のルビーコードに似たものを私に提供するはずです。以下のコードを参照してください。

私の質問には: I) これらの関数を基本クラスに追加してサブクラスでオーバーライドするだけで済みます。これは私に同じ行動を与えるだろう。クラスとインスタンスのメソッドが混在していても。 (私は推測します)これは "ベストプラクティス/デザイン"の観点からは良いでしょうか?

2) 私が「スウィフト・ウェイ」をしたいと思うものを達成するクリーナー/ニースの方法はありますか?

感謝 ヨハネス

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

あなただけのクラスメソッドにアクセスするためのクラス型そのものを使用する必要があります。クラスメソッドの全体のポイントは型のインスタンスに関連付けられていないため、インスタンスを介してアクセスすることはできません。

あなたがそうのようなリスト/検索クラスのメソッドにアクセスすることができます。

News.list() 
News.search() 
+0

[OK]を、理解しました。クライアント(エンドポイントへの接続を処理する)への参照が必要です。だから私はそれを引数としてクラス関数に渡さなければならないと思いますか? –

+0

そのいずれか、または関数をインスタンス関数にします。これ以上の詳細がなければ、どちらがより良いアプローチであるかを確かめることはできません。 –

関連する問題