我已经在swift中创建了Class,并且我在Obj-C启用的项目中使用了该类及其协议,但是在编译项目时我遇到了错误。
无法找到'SpeechRecognizerDelegate'的协议声明;没有 你的意思是'SFSpeechRecognizerDelegate'?
任何人都可以指导我如何在我的Obj-C课程中使用swift类协议。
这是我的Swift代码:
import { Component } from '@angular/core';
import { EmployeesService } from './employees.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
constructor(private employeesService: EmployeesService){}
ngOnInit() {
this.employeesService.getEmployees();
}
}
在Obj-C中使用协议:
protocol SpeechRecognizerDelegate : class {
func speechRecognitionFinished(_ transcription:String)
func speechRecognitionError(_ error:Error)
}
class SpeechRecognizer: NSObject, SFSpeechRecognizerDelegate {
open weak var delegate: SpeechRecognizerDelegate?
}
如果需要更多信息,请告诉我。
先谢谢。
答案 0 :(得分:4)
像这样定义你的 Swift 协议
@objc protocol SpeechRecognizerDelegate{
func speechRecognitionFinished(_ transcription:String)
func speechRecognitionError(_ error:Error)
}
对于协议使用,我们需要在 Objective C 文件中添加协议 -
#import "ARBot-Swift.h"
@interface ChatScreenViewController : JSQMessagesViewController <SpeechRecognizerDelegate>
然后您需要符合协议方法 -
- (void)viewDidLoad {
[super viewDidLoad];
SpeechRecognizer * speechRecognizer = [[SpeechRecognizer alloc] init];
speechRecognizer.delegate = self;
}
#pragma mark - Delegate Methods
-(void)speechRecognitionFinished:(NSString *) transcription{
//Do something here
}
-(void)speechRecognitionError:(NSError *) error{
//Do something here
}
答案 1 :(得分:2)
为您的协议添加@objc
属性:
@objc protocol SpeechRecognizerDelegate : class {
//...
}
答案 2 :(得分:1)
我在遵循(导入标题+协议上的Objc注释)之后遇到了类似的问题。当我从Objective C头文件中使用Swift代码时,我收到了警告。仅通过导入到实现.m文件解决。
答案 3 :(得分:1)
在Swift中:
@objc public protocol YOURSwiftDelegate {
func viewReceiptPhoto()
func amountPicked(selected: Int)
}
class YourClass: NSObject {
weak var delegat: YOURSwiftDelegate?
}
在Objective-C headerFile.h中
@protocol YOURSwiftDelegate;
@interface YOURController : UIViewController < YOURSwiftDelegate >
在Objective-C实施中。m
SwiftObject * swiftObject = [SwiftObject alloc] init];
swiftObject.delegate = self
答案 4 :(得分:0)
使用前向声明在 Objective-C 标头中包含 Swift 类
//MySwiftClass.swift
@objc protocol MySwiftProtocol {}
@objcMembers class MySwiftClass {}
// MyObjcClass.h
@class MySwiftClass;
@protocol MySwiftProtocol;
@interface MyObjcClass : NSObject
- (MySwiftClass *)returnSwiftClassInstance;
- (id <MySwiftProtocol>)returnInstanceAdoptingSwiftProtocol;
// ...
@end