gpt4 book ai didi

ios - 如何运行 Objective-C 类的子类的 Swift 方法,该方法具有同名方法

转载 作者:行者123 更新时间:2023-11-28 10:45:37 25 4
gpt4 key购买 nike

我首先拥有的是:

  • 我在 JSQMessagesViewController.m 中有这个方法:

    - (id<JSQMessageData>)collectionView:(JSQMessagesCollectionView *)collectionView messageDataForItemAtIndexPath:(NSIndexPath *)indexPath
    {
    NSAssert(NO, @"ERROR: required method not implemented: %s", __PRETTY_FUNCTION__);
    return nil;
    }
  • 然后是带有子类的 MessagesViewController.swift:

    class MessagesViewController: JSQMessagesViewController {

    里面有这个方法:

    func collectionView(collectionView: JSQMessagesCollectionView!, messageDataForItemAtIndexPath: NSIndexPath!) -> JSQMessageData! {
    return messages[messageDataForItemAtIndexPath.item]
    }
  • MessagesViewController

    类 Storyboard中的 Controller

明显的“问题”:

当我运行该应用程序时出现此错误:错误:未实现所需方法:-[JSQMessagesViewController collectionView:messageDataForItemAtIndexPath:]'

所以,显然正在调用 JSQMessagesViewController.m 中的方法。

我尝试解决的问题以及真正的问题:

  1. 将 swift 方法重命名为:

    func collectionView(_ collectionView: JSQMessagesCollectionView!, messageDataForItemAtIndexPath: NSIndexPath!) -> JSQMessageData! {
    • 但是我得到了:带有 Objective-C 选择器“collectionView:messageDataForItemAtIndexPath:”的方法“collectionView(_:messageDataForItemAtIndexPath:)”与来自父类(super class)“JSQMessagesViewController”的方法“collectionView(_:messageDataForItemAt:)”冲突使用相同的 Objective-C 选择器
  2. 然后添加覆盖前缀以防止上述冲突:

    override func collectionView(_ collectionView: JSQMessagesCollectionView!, messageDataForItemAtIndexPath: NSIndexPath!) -> JSQMessageData! {
    • 但是我得到:方法没有覆盖其父类(super class)中的任何方法

我想知道的:

  1. 我想了解第 1 点(方法与其父类(super class)同名方法之间的冲突)和第 2 点(没有同名的父类(super class)方法)之间的矛盾。

    <
  2. 假设正在使用的 Controller 属于类 MessagesViewController 而不是 JSQMessagesViewController 来运行代码(因为这是在身份检查器中编写的类),并且使用 swift 子类方法调用 [object collectionView:..., messageDataForItemAtIndexPath:...]。

最佳答案

试试这个定义(Swift 3):

override func collectionView(_ collectionView: JSQMessagesCollectionView, messageDataForItemAt indexPath: IndexPath) -> JSQMessageData {
// return your item
}

我大约 6 个月前在我的项目中使用了它。

附言JSQMessagesViewController 现已弃用,不再维护。您可以使用 MessageKit相反。

附言您可以了解有关如何将 objective-c 方法导入 Swift 的更多信息 here .

关于ios - 如何运行 Objective-C 类的子类的 Swift 方法,该方法具有同名方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48673576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com