【问题标题】:UITableViewController: No member 'isEditing' can be foundUITableViewController:找不到成员“isEditing”
【发布时间】:2014-06-15 16:55:40
【问题描述】:

我已将 UITableViewController 子类化,并且我正在使用一个按钮将我的表格切换到编辑模式。一切都以这种方式与 Objective-C 一起工作:

if (self.isEditing) {
    [sender setTitle:@"Edit" forState:UIControlStateNormal];
    [self setEditing:NO animated:YES];
} else {
    [sender setTitle:@"Done" forState:UIControlStateNormal];
    [self setEditing:YES animated:YES];
}

但现在我想实现一个 Swift 版本:

if self.isEditing {
    sender.setTitle("Edit", forState: .Normal)
    self.setEditing(false, animated: true)
} else {
    sender.setTitle("Done", forState: .Normal)
    self.setEditing(true, animated: true)
}

我收到错误:

“MyViewController”没有名为“isEditing”的成员

如果唯一的区别是我使用的是 Swift 而不是 Objective-C,为什么会缺少成员?

【问题讨论】:

    标签: ios objective-c swift


    【解决方案1】:

    实际上,除了您使用的语言之外,并非所有内容都是相同的。 Apple 也为 UITableViewController 及其超类 UIViewController 使用 Swift 而不是 Objective-C。您使用的属性在 Objective-C 和 Swift 之间的声明略有不同。两者都命名为editing,但缺陷是:只有Objective-C 有一个名为isEditing 的getter。

    Objective-C 声明是:

    @property(nonatomic, getter=isEditing) BOOL editing
    

    但 Swift 声明只是:

    var editing: Bool
    

    所以,你必须使用editing 而不是isEditing

    来源:iOS 开发者库 - 预发布:http://goo.gl/AOoFQl

    如果尚未选择:“选择语言:两者”以查看 Swift 和 Objective-C 声明。如果您想将代码从 Objective-C 转换为 Swift,这将非常有用。

    【讨论】:

    • 现在很好用!我之前看过属性“编辑”,但我认为它一定是为了不同的东西。
    • 但为什么 Apple 对 Swift 和 Objective-C 使用不同的名称?
    • 你想要视图控制器的编辑属性,还是表格视图的编辑属性?当我第一次看到你的帖子时,我认为错误是没有使用 self.tableview.isEditing,但似乎视图控制器也有一个编辑属性。
    • 我总是发现像 editing 这样的属性有不同的名称,让 getter 很烦人。为什么属性是editing 而getter 是isEditing?命名约定的存在是有原因的。如果 Swift 正在规范化属性 getter/setter 名称,我会很高兴。
    • UITableViewController 从 UIViewController 继承“编辑”。所以,它不应该打扰。
    猜你喜欢
    • 2014-08-28
    • 2023-04-08
    • 2012-09-23
    • 2019-09-03
    • 2011-11-03
    • 2012-07-13
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多