2017-06-07 12 views
0

私は新しいiOS開発者です。私のプロジェクト内の別の目的のCファイルでSwiftクラスを初期化するのに小さな問題があります。私はすでに適切にプロジェクトを設定し、この質問への回答ごとにクラスをインポートしていますObjective-Cでswiftクラスの複数引数initを使用するための構文

Can't use Swift classes inside Objective-C

私の質問はこれです:何がObjective-Cでこの迅速クラスの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) 
    } 
} 

:本はNSDictionaryの

ですが、エラーがある

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

は「『ブック』の目に見える@interfaceはセレクタ「を宣言していません

initWithNewTitle :newAuthor:NewDetail:..... '

答えて

1

すべてのパラメータはObjective-Cと互換性がある必要があります。すべての@objcクラスとObjectでサポートされているデータ型のみを使用する必要がありますive-C。たとえば、タプルとスウィフトストラクチャは、Objective-Cでは有効な型ではありません。

私はオプションがサポートされているとは思わない。 initメソッドはオプションです。それがあなたの問題だと私は確信しています。