2

我有一个 Objective C 类,它的方法如下所示:

@class Client;

@protocol ClientDelegate <NSObject>

@optional
-(void) receivedMessageFromClient : (id) message;

@end

@interface Client : NSObject 

+(id) setup; 
 @property(nonatomic, strong) id <ClientDelegate> clientDelegate;

// more method declarations below

我在我的 Swift 类中实现 ClientDelegate,如下所示:

class HomeViewController: UIViewController, ClientDelegate {
    var client : AnyObject?
    var delegate: ClientDelegate?

    override func viewDidLoad() {
        super.viewDidLoad()

        client = Client.setup() as! Client
         client.clientDelegate = self
    }

func receivedMessageFromClient(message: AnyObject) {
        print("Message recieved: \(message)")
    }
}

这给了我一个编译错误:

无法分配给属性:“自我”是不可变的

当我删除线条时

client = Client.setup() as! Client
client.clientDelegate = self

代码编译并调用 Client 类中的方法,该类依次向 发送消息receivedMessageFromClient,但未调用该方法HomeViewController。除了将 self 指定为委托之外,似乎一切都已设置好。

4

2 回答 2

11

查看我对您的问题的评论,但这是在 Swift 中实现的 Objective-C 委托的基本示例:

目标-C:

@protocol MyDelegate <NSObject>

@optional
- (void)canImplementThis:(int)aVar;
@required
- (BOOL)needToImplementThis;

@end

@interface MyClass : NSObject

@property (nonatomic, weak) id<MyDelegate> delegate;

@end

迅速:

class SwiftClass : UIViewController, MyDelegate {

    var myObj : MyClass?

    override func viewDidLoad() {
        super.viewDidLoad()

        myObj = MyClass()
        myObj?.delegate = self
    }

    // MARK: - <MyDelegate>

    func canImplementThis(aVar : Int) {
        print("Called: \(aVar))
    }

    func needToImplementThis() -> Bool {
        return false
    }

}

请原谅我直接在 SO 中输入的任何拼写错误。

于 2015-11-20T09:31:05.643 回答
0

出于某种原因不得不将 Int 更改为 Int32 以修复无效的选择器问题,Int32 在 swift 端但随后工作

于 2017-11-09T21:49:08.393 回答