2017-04-12 48 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。