2017-04-12 49 views
0

我有一个viewcontrollerSwift,运作良好,我想从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 = selfObjective-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 
    } 
} 

任何人都有想法?

在此先感谢。

+0

什么是DALSearchResult? –

+0

这是一个我在swift中调用的类,其中包含有关人员搜索的信息(名字,姓氏,电话号码,电子邮件等等) – Claudio

+0

也添加/显示班级代码。 –

回答

1

你能分享DALSearchResult的声明是怎么样的吗?也许这是一个不能被转换成Obj-C的枚举。在这种情况下,您可能需要以不同的方式传递result

+0

我宣布它是这样的:var结果:[DALSearchResult] = [],我把它在邮件中刚才。 – Claudio

+1

正如其他人所建议的,只需尝试'@objc class DALSearchResult:NSObject',在其中定义您的类。 – petertoth

+0

我所说的那样,它是更好的,它现在接受类DALSearchResult声明,但现在它使我另一条消息:[MainViewController planningSearchDidSelectResult:]:无法识别的选择发送到实例。 mainviewController是我的主要目标-C类 – Claudio

0

从客观-C访问迅速,你必须始终导入swift.h在你的类,你要使用它像这样

#import "Yourprojectname-Swift.h" 
2

制作DALSearchResult类的Objective-C兼容。如果你的DALSearchResult没有从NSObject扩展,你可以将它扩展为NSObject。