如何在 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:既然我已经找到了解决方案的答案,我想指出我忽略了 IndexPath
和 NSIndexPath
。别是我,混淆了 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
.
我正在使用框架 GlyuckDataGrid 在 Objective-C 中实现数据网格。有一个名为 IndexPath+DataGrid.swift
的扩展,它对数据网格的实现至关重要,但它是用 Swift.
我正在使用 CocoaPods,我有以下导入但仍然无法访问它。
@import GlyuckDataGrid;
#import <GlyuckDataGrid/GlyuckDataGrid-Swift.h>
E:既然我已经找到了解决方案的答案,我想指出我忽略了 IndexPath
和 NSIndexPath
。别是我,混淆了 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
.