我试图转换我在this文章中找到的Objective-C代码段。这是原始代码。
.h文件
#import <Foundation/Foundation.h>
typedef void (^TableViewCellConfigureBlock)(id cell, id item);
@interface ArrayDataSource : NSObject <UITableViewDataSource>
- (id)initWithItems:(NSArray *)anItems
cellIdentifier:(NSString *)aCellIdentifier
configureCellBlock:(TableViewCellConfigureBlock)aConfigureCellBlock;
@end
.m文件
@interface ArrayDataSource ()
@property (nonatomic, strong) NSArray *items;
@property (nonatomic, copy) NSString *cellIdentifier;
@property (nonatomic, copy) TableViewCellConfigureBlock configureCellBlock;
@end
@implementation ArrayDataSource
- (id)initWithItems:(NSArray *)anItems
cellIdentifier:(NSString *)aCellIdentifier
configureCellBlock:(TableViewCellConfigureBlock)aConfigureCellBlock
{
self = [super init];
if (self) {
self.items = anItems;
self.cellIdentifier = aCellIdentifier;
self.configureCellBlock = [aConfigureCellBlock copy];
}
return self;
}
@end
这是我的尝试。
import Foundation
import UIKit
public class TableViewDataSource: NSObject, UITableViewDataSource {
var items: [AnyObject]
var cellIdentifier: String
var TableViewCellConfigure: (cell: AnyObject, item: AnyObject) -> Void
init(items: [AnyObject]!, cellIdentifier: String!, configureCell: TableViewCellConfigure) {
self.items = items
self.cellIdentifier = cellIdentifier
self.TableViewCellConfigure = configureCell
super.init()
}
}
但我在此行self.TableViewCellConfigure = configureCell
收到错误使用未声明的类型&#39; TableViewCellConfigure&#39; 。
我尝试了另一种方式。我没有为闭包声明变量,而是将其声明为一个类型。
typealias TableViewCellConfigure = (cell: AnyObject, item: AnyObject) -> Void
但是我在上面的同一行上遇到了一个新的错误:&#39; TableViewDataSource&#39;没有名为&#39; TableViewCellConfigure&#39; 的成员。
有人可以帮我解决这个问题吗?
谢谢。
答案 0 :(得分:1)
问题是您在init
中将TableViewDataSource与TableViewCellConfigure混淆了。这对我来说很好:
typealias TableViewCellConfigure = (cell: AnyObject, item: AnyObject) -> Void // At outer level
class TableViewDataSource: NSObject/*, UITableViewDataSource */ { // Protocol commented out, as irrelevant to question
var items: [AnyObject]
var cellIdentifier: String
var tableViewCellConfigure: TableViewCellConfigure // NB case
init(items: [AnyObject], cellIdentifier: String!, configureCell: TableViewCellConfigure) {
self.items = items
self.cellIdentifier = cellIdentifier
self.tableViewCellConfigure = configureCell
super.init()
}
}
另请注意,您使用大写字母作为属性名称tableViewCellConfigure
- 我已经改变了它,因为它让我感到困惑,而且可能是你!