【问题标题】:Implementing Objective C delegate in Swift在 Swift 中实现 Objective C 委托
【发布时间】:2015-11-20 08:16:33
【问题描述】:

我有一个 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)")
    }
}

这给了我一个编译错误:

无法分配给属性:'self' 是不可变的

当我删除线条时

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

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

【问题讨论】:

标签: objective-c swift swift-protocols


【解决方案1】:

查看我的 cmets 关于您的问题,但这是在 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 中直接输入的任何拼写错误。

【讨论】:

  • 如何在objective-c中调用needToImplementThiscanImplementThis
  • 发现:[_delegate method:value];,谢谢!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多