如何在 Objective-C 中访问 Swift 扩展程序?

How can I access a Swift extension in Objective-C?

我正在使用框架 GlyuckDataGrid 在 Objective-C 中实现数据网格。有一个名为 IndexPath+DataGrid.swift 的扩展,它对数据网格的实现至关重要,但它是用 Swift.

编写的

我正在使用 CocoaPods,我有以下导入但仍然无法访问它。

@import GlyuckDataGrid;
#import <GlyuckDataGrid/GlyuckDataGrid-Swift.h>

E:既然我已经找到了解决方案的答案,我想指出我忽略了 IndexPathNSIndexPath。别是我,混淆了 2...

该框架使用纯 Swift 类型 (IndexPath) 而不是其 Objective-C 等效类型 (NSIndexPath)。在您的情况下,解决方案是扩展 NSIndexPath 以及 IndexPath 以将功能公开给 Objective-C:

public extension NSIndexPath {
    /**
     Returns an index-path object initialized with the indexes of a specific row and column in a data grid view.
     - parameter column: An index number identifying a column in a DataGridView object in a row identified by the row parameter.
     - parameter row:    An index number identifying a row in a DataGridView object.
     - returns: An NSIndexPath object.
     */
    convenience init(forColumn column: Int, row: Int) {
        self.init(item: column, section: row)
    }

    /// An index number identifying a column in a row of a data grid view. (read-only)
    var dataGridColumn: Int {
        return self.index(atPosition: 1)
    }

    /// An index number identifying a row in a data grid view. (read-only)
    var dataGridRow: Int {
        return self.index(atPosition: 0)
    }

    /// An index number for single-item indexPath
    var index: Int {
        return self.index(atPosition: 0)
    }
}

来自 c281729.