- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个 Swift iOS 项目,它使用用 Objective-C 编写的 MLPAutoCompleteTextField 库。这是我的 Swift 类试图实现的 MLPAutoCompleteTextFieldDataSource 协议(protocol):
@protocol MLPAutoCompleteTextFieldDataSource <NSObject>
@optional
- (void)autoCompleteTextField:(MLPAutoCompleteTextField *)textField
possibleCompletionsForString:(NSString *)string
completionHandler:(void(^)(NSArray *suggestions))handler;
- (NSArray *)autoCompleteTextField:(MLPAutoCompleteTextField *)textField
possibleCompletionsForString:(NSString *)string;
@end
这是我的 Swift 类:
class MyAutocompleteDataSource : NSObject, MLPAutoCompleteTextFieldDataSource {
override func autoCompleteTextField(textField : MLPAutoCompleteTextField,
possibleCompletionsForString : String)
-> Array<String> {
return nil
}
}
编译后报这两个错误:
错误:(17, 23) 方法没有覆盖其父类(super class)中的任何方法
错误:(17, 23) 方法“autoCompleteTextField(:possibleCompletionsForString:)”提供的 Objective-C 方法“autoCompleteTextField:possibleCompletionsForString:”与可选要求方法“autoCompleteTextField(:”冲突协议(protocol)“MLPAutoCompleteTextFieldDataSource”中的 possibleCompletionsForString:)'
如果您不仅能解释如何解决这个问题,还能指出在 Swift 中实现 Obj-C 协议(protocol)时如何映射各种类型(数组、回调等)的一些通用规则或引用,我们将不胜感激。
最佳答案
对于第一个错误,实现协议(protocol)方法时不需要重写,只有从父类(super class)重新实现方法时才需要重写
对于第二个错误,在协议(protocol)中,该方法返回一个桥接为 [AnyObject] 而不是 [String] 的 NSArray
那就是
@objc func autoCompleteTextField(textField: MLPAutoCompleteTextField, possibleCompletionsForString string: String) -> Array<AnyObject> {
return []
}
如果你真的知道数组将只包含字符串,你可以改为将协议(protocol)更改为以下内容,你只需要删除覆盖关键字
- (NSArray <NSString *> *)autoCompleteTextField:(MLPAutoCompleteTextField *)textField
possibleCompletionsForString:(NSString *)string;
请注意,返回 nil 将不起作用,因为您返回的是 Array 而不是 Array?。如果您真的希望返回 nil,您需要为返回类型 Array 添加可空性吗?
如果您喜欢较短的行,可以用 [String] 替换 Array
关于ios - 尝试实现 Objective-C 协议(protocol)的 Swift 类因可选方法冲突错误而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36695342/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!