Синтаксис использования инициализации с несколькими аргументами для быстрого класса в Objective-C

Я новый разработчик iOS, и у меня возникла небольшая проблема с инициализацией класса Swift в отдельном целевом файле C в моем проекте. Я уже правильно настроил проект и импортировал класс в соответствии с ответами на этот вопрос:

Невозможно использовать классы Swift внутри Objective-C

У меня такой вопрос: каким будет синтаксис для вызова метода init этого быстрого класса в Objective-C?

@objc class Book: NSObject{
    private var title: String
    private var author: String
    private var detail: String
    private var buyLink: String
    private var rank: integer_t
    private var lastRank: integer_t?

    public init(newTitle: String,newAuthor: String, newDetail: String, newBuyLink: String, newRank: integer_t, newLastRank: integer_t?){
        self.title = newTitle
        self.author = newAuthor
        self.detail = newDetail
        self.buyLink = newBuyLink
        self.rank = newRank
        self.lastRank = newLastRank
    }

    func getBasicInfo() -> (title: String, author: String) {
        return (title, author)
    }

    func getDetailInfo() -> (detail: String, buyLink: String, rank: integer_t, lastRank: integer_t?) {
        return (detail, buyLink, rank, lastRank)
    }
}

Пробовал писать так:

NSString *title = [NSString stringWithFormat:@"%@", book[@"title"]];
NSString *author = [NSString stringWithFormat:@"%@", book[@"author"]];
NSString *detail = [NSString stringWithFormat:@"%@", book[@"description"]];
NSString *buyLink = [NSString stringWithFormat:@"%@", book[@"amazon_product_url"]];
int rank = [book[@"rank"] intValue];
int lastRank = [book[@"rank_last_week"] intValue];

Book *bookFromList = [[Book alloc] initWithNewTitle: title newAuthor: author 
    newDetail: detail newBuyLink: buyLink newRank: rank newLastRank: lastRank];

где книга - это NSDictionary

но есть ошибка «Нет видимого @interface для« Книги »объявляет селектор« initWithNewTitle: newAuthor: NewDetail: ..... »


person Ben    schedule 07.06.2017    source источник


Ответы (1)


Все параметры должны быть совместимы с Objective-C. Вы должны использовать все классы @objc и только те типы данных, которые поддерживаются Objective-C. Tuples и Swift Structs, например, не являются допустимыми типами в Objective-C.

Я не думаю, что факультативы поддерживаются. Ваш метод инициализации принимает необязательный параметр. Я почти уверен, что это твоя проблема.

person Duncan C    schedule 07.06.2017