在 Objective-C 中为 swift class 使用多参数初始化的语法
Syntax for using multi-argument init for a swift class in Objective-C
我是一名新的 iOS 开发人员,在我的项目中的一个单独的 objective C 文件中初始化 Swift class 时遇到了一个小问题。我已经正确配置了项目并根据这个问题的答案导入了 class:
Can't use Swift classes inside Objective-C
我的问题是:在 objective-C 中调用此 swift class 的 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
但是出现错误“No visible @interface for 'Book' declares the selector 'initWithNewTitle:newAuthor:NewDetail:.....'
所有参数都需要兼容Objective-C。您必须使用所有@objc 类,并且只能使用 Objective-C 支持的数据类型。例如,元组和 Swift 结构在 Objective-C.
中不是有效类型
我认为不支持可选。你的 init 方法需要一个可选的。我很确定这是你的问题。
我是一名新的 iOS 开发人员,在我的项目中的一个单独的 objective C 文件中初始化 Swift class 时遇到了一个小问题。我已经正确配置了项目并根据这个问题的答案导入了 class:
Can't use Swift classes inside Objective-C
我的问题是:在 objective-C 中调用此 swift class 的 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
但是出现错误“No visible @interface for 'Book' declares the selector 'initWithNewTitle:newAuthor:NewDetail:.....'
所有参数都需要兼容Objective-C。您必须使用所有@objc 类,并且只能使用 Objective-C 支持的数据类型。例如,元组和 Swift 结构在 Objective-C.
中不是有效类型我认为不支持可选。你的 init 方法需要一个可选的。我很确定这是你的问题。