Implementação do protocolo ObjC no Swift
Ok, aqui está o grande problema. Eu tinha uma biblioteca escrita em ObjC (esta) Lá nós tínhamos um protocolo definido. Quando tentei usá-lo em um arquivo rápido, fico constantemente:
O tipo "XXX" não está em conformidade com o protocolo "XXX"
Para simplificar as coisas, criei um projeto de teste - ele deveria ser criado como projeto Swift.
Em seguida, crie o arquivo de cabeçalho ObjC (eu chamei de StupidProtocol.h) com o seguinte protocolo interno (observe cada nome e valor para corresponder exatamente ao dado, incluindo maiúsculas / minúsculas):
@protocol MyProtocol <NSObject>
- (NSString *)getAxisLabel:(id)axis Value:(CGFloat)value;
@end
No cabeçalho da ponte:
#import "StupidProtocol.h"
E depois de volta no arquivo Swift:
class ViewController: UIViewController, MyProtocol
{
func getAxisLabel(axis: AnyObject!, value: CGFloat) -> String! {
return ""
}
}
E baam, recebemos esse erro novamente, apesar de o preenchimento automático concluir a função getAxisLabel para mim.
Eu suspeito fortemente que o problema esteja no argumento "value" e no parâmetro de função "Value".
Qualquer ajuda será muito apreciada.
EDITAR
Por favor note queesta biblioteca tecnicamente não é meu, então não posso mudar isso. Preciso de uma maneira de usá-lo no Swift sem alterar sua declaração original. Meu exemplo é apenas para simplificar meu problema.
O QUE EU TENTEI
Eu tentei seguir cenários sem sucesso:
erro 'tem argumentos diferentes dos exigidos pelo protocolo'
func getAxisLabel(axis: AnyObject!, Value value: CGFloat) -> String! {
return ""
}
erro 'tem argumentos diferentes dos exigidos pelo protocolo'
func getAxisLabel(axis: AnyObject!, Value: CGFloat) -> String! {
return ""
}
'tipo não está em conformidade com o protocolo'
func getAxisLabel(axis: AnyObject!, Value: CGFloat) -> NSString! {
return ""
}
SOLUÇÃO
Vejoresposta aceita