【问题标题】:Syntax for using multi-argument init for a swift class in Objective-C在 Objective-C 中为 swift 类使用多参数初始化的语法
【发布时间】:2017-11-09 10:03:30
【问题描述】:

我是一名新的 iOS 开发人员,在我的项目中初始化一个单独的目标 C 文件中的 Swift 类时遇到了一个小问题。我已经根据这个问题的答案正确配置了项目并导入了类:

Can't use Swift classes inside Objective-C

我的问题是:在 Objective-C 中调用这个 swift 类的 init 方法的语法是什么?

@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];

其中 book 是一个 NSDictionary

但是有一个错误“'Book'没有可见的@interface声明选择器'initWithNewTitle:newAuthor:NewDetail:.....'

【问题讨论】:

    标签: ios objective-c swift language-interoperability


    【解决方案1】:

    所有参数都需要与Objective-C兼容。您必须使用所有 @objc 类,并且只能使用 Objective-C 支持的数据类型。例如,元组和 Swift 结构在 Objective-C 中不是有效的类型。

    我认为不支持 Optional。你的 init 方法需要一个可选的。我很确定这是你的问题。

    【讨论】:

      猜你喜欢
      • 2018-03-06
      • 2011-03-10
      • 1970-01-01
      • 2020-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-15
      • 1970-01-01
      相关资源
      最近更新 更多