0
在Objective-C我經常使用下面的「設計模式」在我的代碼以「廣播」幕後輸入回調:與斯威夫特陣列工作 - 如何實現符合協議的對象數組
@protocol RPSceneDelegate <NSObject>
-(void)someMethod;
-(void)didTap;
@end
@interface RPScene : SKScene
@property (nonatomic, strong) NSMutableArray<id<RPSceneDelegate>>* delegates;
-(void)addDelegate:(id<RPSceneDelegate>)delegate_;
-(void)removeDelegate:(id<RPSceneDelegate>)delegate_;
@end
@implementation RPScene
#pragma mark - Delegate Handling
-(void)addDelegate:(id<RPSceneDelegate>)delegate_ {
if ([self.delegates containsObject:delegate_]) return;
[self.delegates addObject:delegate_];
}
-(void)removeDelegate:(id<RPSceneDelegate>)delegate_ {
if (![self.delegates containsObject:delegate_]) return;
[self.delegates removeObject:delegate_];
}
-(void)didTap {
for (id<RPSceneDelegate> delegate_ in self.delegates) {
// Just a small example to show what I am doing
[delegate_ performSelector:@selector(didTap)];
}
}
@end
昨天晚上我試圖用斯威夫特陣列(不NSMutableArray的),將其轉換爲迅速,但檢查時,我結束了完全令人沮喪:
array.contains(theObject)
爲了更好地瞭解雨燕這將幫助我,如果有人可以轉換Swift的那一小段代碼。那麼我怎麼在Swift中實現呢?
編輯:我在銀行代碼
protocol RPSceneDelegate {
func someMethod()
}
class RPScene: SKScene {
var delegates = [RPSceneDelegate]()
func addDelegate(delegate: RPSceneDelegate) {
if !delegates.contains(delegate) {
delegates.append(delegate)
}
}
}
什麼工作正常是:
delegates.append(delegate)
是什麼給了我一個錯誤是:
delegates.contains(delegate)
編譯器說:
無法將類型 'RPSceneDelegate' 的值,以期望的參數 類型 '@noescape(RPSceneDelegate)拋出 - >布爾'
問題是。我只是不知道是什麼意思......我的第一個想法是。載有()需要一個函數,而不是一個實例/對象,但我不知道如何實現......
顯示您嘗試的代碼和錯誤/問題(使用編譯消息或堆棧跟蹤) – Wain
@Wain參見上面 –