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

时间:2016-11-23 19:34:19

标签: ios objective-c swift objective-c-category

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

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

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

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

1 个答案:

答案 0 :(得分: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