2016-11-06 10 views
1

私はこのObjective-Cクラスを迅速なプロジェクトにインポートしました。 MMLANSCanner.hObjective-CクラスのinitWithDelegate

#import <Foundation/Foundation.h> 

@class Device; 
@protocol MMLANScannerDelegate; 
@protocol MMLANScannerDelegate <NSObject> 
@required 
- (void)lanScanDidFinishScanningWithStatus:(MMLanScannerStatus)status; 
- (void)lanScanDidFailedToScan; 
@optional 
- (void)lanScanProgressPinged:(float)pingedHosts from:(NSInteger)overallHosts; 
@end 

#pragma mark - Public methods 
@interface MMLANScanner : NSObject 
-(instancetype)initWithDelegate:(id <MMLANScannerDelegate>)delegate; 
@property(nonatomic,weak) id<MMLANScannerDelegate> delegate; 
@property(nonatomic,assign,readonly)BOOL isScanning; 
- (void)start; 
- (void)stop; 
@end 

私は正常にブリッジングヘッダを作成し、MainVC.SwiftがMMLANScannerDelegateに準拠するようにします。 次に、デリゲートselfでMMLanScannerを初期化しようとしました。

import UIKit 
import Foundation 

class MainVC: UIViewController, MMLANScannerDelegate { 

    var presenter = MMLANScanner(delegate:self) 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    func lanScanDidFindNewDevice(_ device: Device!) { 

    } 

    func lanScanDidFailedToScan() { 

    } 

    func lanScanDidFinishScanning(with status: MMLanScannerStatus) { 

    } 

    func lanScanProgressPinged(_ pingedHosts: Float, from overallHosts: Int) { 

    } 
} 

しかし、私はエラーを取得する:

Argument passed to call that takes no arguments

任意のアイデア私はObjective-Cで持っていたinitWithDelegate機能を実装する方法?

+0

あなたはなぜdownvoteを説明できますか? – BlackM

答えて

1

MLANScannerはそのinit方法(delegateMLANScannerプロパティである)にdelegate引数を取りません。

プロパティの定義に問題があります。selfは、MainVCが作成された時点で無効です。

代わりにこれを行います。

let presenter = MLANScanner() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    presenter.delegate = self 
} 

質問への編集に基づいて:

var presenter: MLANScanner! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    presenter = MLANScanner(delegate: self) 
} 

注:私の編集した答えはinit(delegate:)方法を公開どこかスウィフト橋がある前提としています。この質問の範囲を超えているものはありません。デリゲートはプライベートでも読み取り専用でもないので、私が投稿した最初のバージョンをほぼ確実に使用できます。

+0

私はそれを試みましたが、initWithDelegateはまったく呼び出されませんでした。 – BlackM

+0

MMLANScannerは、そのメソッドでデリゲートを受け取ります。私は誤って削除しました。更新の質問をしてください。 (申し訳ありません) – BlackM

+0

投稿した回答があなたの望むことを実行するのに 'initWithDelegate'を呼び出す必要はないでしょう。 – par

関連する問題