2017-11-24 4 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) 난 그저 내 기본 클래스에 이러한 기능을 추가하고 내 하위 클래스에서이를 오버라이드 (override) 할 수있다. 이것은 저에게 동일한 행동을 줄 것입니다. 클래스 및 인스턴스 메서드를 혼합하더라도. (나는 짐작한다) 이것이 "모범 사례/설계"의 관점에서 좋을까?

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

좋아, 이해했다. 엔드 포인트에 대한 연결을 처리하는 클라이언트에 대한 참조가 필요합니다. 그래서 클래스 함수에 인수로 전달해야 할 것 같아요? –

+0

또는 함수를 인스턴스 함수로 만듭니다. 더 자세한 내용이 없으면 나는 더 나은 접근법을 확실히 말할 수 없다. –