2015-08-27 57 views
3

目前,我們正在使用我們的項目該庫只讀屬性... https://github.com/OliverLetterer/SLExpandableTableView如何符合Objective-C的協議與斯威夫特

一個如何去符合在雨燕UIExpandingTableViewCell協議?

這裏有一個副本...

typedef enum { 
    UIExpansionStyleCollapsed = 0, 
    UIExpansionStyleExpanded 
} UIExpansionStyle; 

@protocol UIExpandingTableViewCell <NSObject> 

@property (nonatomic, assign, getter = isLoading) BOOL loading; 

@property (nonatomic, readonly) UIExpansionStyle expansionStyle; 
- (void)setExpansionStyle:(UIExpansionStyle)style animated:(BOOL)animated; 

@end 

我試過以下,但仍表示,它不符合它...

class SectionHeaderCell: UITableViewCell, UIExpandingTableViewCell { 

    @objc var loading: Bool 
    @objc private(set) var expansionStyle: UIExpansionStyle 

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 
     super.init(style: style, reuseIdentifier: reuseIdentifier) 
    } 

    required init(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    func setExpansionStyle(style: UIExpansionStyle, animated: Bool) { 


    } 
} 

是否因爲路UIExpansionStyle是在不使用NS_ENUM的情況下定義的?

混淆

+1

相關http://stackoverflow.com/questions/24151197/getter-and-setter-variable-in-swift – Mats

+0

任何人的任何想法? – kaylanx

回答

1

簡答

使用的東西在精神:

var loading:Bool { 
    @objc(isLoading) get { 
     return self._isLoading 
    } 
    set(newValue){ 
     _isLoading = newValue 
    } 
} 

長的答案

創建一個新的,新的項目,做了pod init ,添加一個Podfile類似於下面的那個,並運行pod install

platform :ios, '8.0' 
target 'SO-32254051' do 
pod 'SLExpandableTableView' 
end 

使用Objective-C命名屬性屬性斯威夫特

由於developer.apple.com文檔閱讀:

使用@objc(<#名#>)屬性提供的Objective-C必要時用於屬性和方法的名稱。

符合性問題就是這樣的:自定義getter名稱。

完整的解決方案

採用協議

class TableViewCell: UITableViewCell, UIExpandingTableViewCell { ... } 

定義本地存儲

var _isLoading:Bool = false 
var _expansionStyle:UIExpansionStyle = UIExpansionStyle(0) 

實施命名的getter和setter

var loading:Bool { 
    @objc(isLoading) get { 
     return self._isLoading 
    } 
    set(newValue){ 
     _isLoading = newValue 
    } 
} 

private(set) var expansionStyle:UIExpansionStyle { 
    get{ 
     return _expansionStyle 
    } 
    set(newValue){ 
     _expansionStyle = newValue 
    } 
} 

func setExpansionStyle(style: UIExpansionStyle, animated: Bool) { 
    self.expansionStyle = style 
    // ... 
} 

使用枚舉速記

你還別說是不是因爲UIExpansionStyle不使用NS_ENUM定義的方法是什麼?在你的問題。這實際上完全是一個不同的問題,你可以在庫中輕鬆修復,然後執行git push並提出請求。

由於enum未定義爲波紋管,因此​​不能使用.Collapsed速記。

typedef NS_ENUM(NSUInteger, UIExpansionStyle) { 
    UIExpansionStyleCollapsed = 0, 
    UIExpansionStyleExpanded 
}; 

,並隨後爲此在斯威夫特

var _expansionStyle:UIExpansionStyle = UIExpansionStyle.Collapsed 

編譯,連接,內置&跑去。

相關問題