如何从Objective-C使用委托Swift?
问题描述:
我有一个viewcontroller
在Swift
,运作良好,我想从Objective-C
类使用它。我的问题是我不知道如何使用它。如何从Objective-C使用委托Swift?
我尝试在我的主要Objective-C类的头文件中添加委托。
@interface MainViewController : UIViewController <PlanningSearchDelegate>
但我认为它是一个快速类,它不起作用。错误是:
无法为PlanningSearchDelegate
发现协议声明之后,我试图在迅速类中添加@objc
字。
import UIKit
@objc protocol PlanningSearchDelegate
{
func planningSearchDidSelectResult(_ result:DALSearchResult)
}
class PlanningSearchViewController: UIViewController
{
}
extension PlanningSearchViewController: UITableViewDelegate
{
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
let result = _results[indexPath.row]
delegate?.planningSearchDidSelectResult(result)
}
}
但是我有一个错误消息:
方法不能是@objc协议中的一员,因为该参数的类型不能在Objective-C来表示。
我把delegate = self
主Objective-C
类的prepareForSegue
没有成功:
else if ([segue.identifier isEqualToString:@"showSearchViewSegue"])
{
PlanningSearchViewController *searchViewController = segue.destinationViewController;
searchViewController.delegate = self;
}
的错误信息是:
住宅“代表”的类型PlanningSearchViewController *”的”对象未找到
这是DALSearchResult
类:
进口基金会
class DALSearchResult
{
var contactId: Int
var firstname: String
var lastname: String
var email: String
var phone: String
var city: String
var registrationId: Int?
var slotId: Int?
var vehicleId: Int?
var startDate: Date?
var vehicleName: String?
init(contactId:Int, firstname:String, lastname:String, email:String, phone:String, city:String)
{
self.contactId = contactId
self.firstname = firstname
self.lastname = lastname
self.email = email
self.phone = phone
self.city = city
}
convenience init(registrationId:Int, slotId:Int, vehicleId:Int, contactId:Int, firstname:String, lastname:String, email:String, phone:String, city:String, startDate:Date, vehicleName: String)
{
self.init(contactId: contactId, firstname: firstname, lastname: lastname, email: email, phone: phone, city: city)
self.registrationId = registrationId
self.vehicleId = vehicleId
self.slotId = slotId
self.startDate = startDate
self.vehicleName = vehicleName
}
}
任何人都有想法?
在此先感谢。
答
你能分享DALSearchResult
的声明是怎么样的吗?也许这是一个不能被转换成Obj-C的枚举。在这种情况下,您可能需要以不同的方式传递result
。
答
从客观-C访问迅速,你必须始终导入swift.h在你的类,你要使用它像这样
#import "Yourprojectname-Swift.h"
答
制作DALSearchResult类的Objective-C兼容。如果你的DALSearchResult没有从NSObject扩展,你可以将它扩展为NSObject。
什么是DALSearchResult? –
这是一个我在swift中调用的类,其中包含有关人员搜索的信息(名字,姓氏,电话号码,电子邮件等等) – Claudio
也添加/显示班级代码。 –