2017-01-20 6 views
2

私は迅速なプロジェクトを客観的なcに変換していますが、フォローコードを変換する方法がわからないためにいくつか問題があります。私を助けてください。ありがとう!このSwift構文をObjective Cに変換するには?

public enum UPCarouselFlowLayoutSpacingMode { 
    case fixed(spacing: CGFloat) 
    case overlap(visibleOffset: CGFloat) 
} 

fileprivate var currentPage: Int = 0 { 
    didSet { 
     let character = self.items[self.currentPage] 
     self.infoLabel.text = character.name.uppercased() 
     self.detailLabel.text = character.movie.uppercased() 
    } 
} 
+2

ObjCで利用可能です。 2番目のスニペットは、プロパティの明示的なセッターを実装することで変換できます。 – vadian

+1

Objective-CをSwiftに変換するのは、SwiftからObjective Cに1対1の変換を行うよりもはるかに簡単です。Swiftの列挙型はユニークで強力です。Swiftに変換する簡単な方法を見つけることはできません –

答えて

5

(関連する値を有するenum)最初は、Objective-Cの中には直接相当するものはありません。あなただけのタイプUPCarouselFlowLayoutSpacingの値の周りに渡す

typedef NS_ENUM(NSInteger, UPCarouselFlowLayoutSpacingMode) { 
    UPCarouselFlowLayoutSpacingModeFixed, 
    UPCarouselFlowLayoutSpacingModeOverlap 
}; 

typedef struct { 
    UPCarouselFlowLayoutSpacingMode mode; 
    CGFloat amount; 
} UPCarouselFlowLayoutSpacing; 

:あなたの特定の例では、このようなものを使用することができます。ヘルパー関数を作成して作成しやすくすることができます(例:

秒間
UPCarouselFlowLayoutSpacing UPCarouselFlowLayoutSpacingMakeFixed(CGFloat spacing) { 
    UPCarouselFlowLayoutSpacing value; 
    value.mode = UPCarouselFlowLayoutSpacingModeFixed; 
    value.amount = spacing; 
    return value; 
} 

UPCarouselFlowLayoutSpacing UPCarouselFlowLayoutSpacingMakeOverlap(CGFloat visibleOffset) { 
    UPCarouselFlowLayoutSpacing value; 
    value.mode = UPCarouselFlowLayoutSpacingModeOverlap; 
    value.amount = visibleOffset; 
    return value; 
} 

、あなたのObjective-CクラスのcurrentPageプロパティのセッターメソッドをオーバーライドすることができます

関連するタイプの列挙型ではないので、最初のスニペットは、Objective-Cのに変換することはできません
- (void)setCurrentPage:(NSInteger)page { 
    _page = page; 

    MovieCharacter *character = self.items[page]; 
    self.infoLabel.text = character.name.localizedUppercaseString; 
    self.detailLabel.text = character.movie.localizedUppercaseString; 
} 
+4

私にそれを打つ:| – Alexander

+1

ありがとう!やってみます –

関連する問題