gpt4 book ai didi

ios - 尝试实现 Objective-C 协议(protocol)的 Swift 类因可选方法冲突错误而失败

转载 作者:搜寻专家 更新时间:2023-11-01 06:40:04 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com