当前位置: 首页 > 面试题库 >

条件绑定:如果让出错-条件绑定的初始化程序必须具有Optional类型

蔺霄
2023-03-14
问题内容

我试图从我的数据源和以下代码行中删除一行:

if let tv = tableView {

导致以下错误:

条件绑定的初始化程序必须具有Optional类型,而不是UITableView

这是完整的代码:

// Override to support editing the table view.
func tableView(tableView: UITableView, commitEditingStyle editingStyle:UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if editingStyle == .Delete {

        // Delete the row from the data source

    if let tv = tableView {

            myData.removeAtIndex(indexPath.row)

            tv.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)

我应该如何纠正以下问题?

 if let tv = tableView {

问题答案:

if let/ if var可选绑定仅在表达式右侧的结果为可选时有效。如果右侧的结果不是可选的,则不能使用此可选绑定。此可选绑定的目的是检查nil变量,并且如果不是,则仅使用该变量nil

在您的情况下,tableView参数被声明为非可选类型UITableView。保证永远不会nil。因此,这里不需要进行可选的绑定。

func tableView(tableView: UITableView, commitEditingStyle editingStyle:UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if editingStyle == .Delete {
        // Delete the row from the data source
        myData.removeAtIndex(indexPath.row)
        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)

我们要做的就是摆脱if let并将其中出现的任何内容更改tv为just tableView



 类似资料:
  • 问题内容: 这是我更新到后遇到的一个有趣的问题 错误就在网上 问题答案: 编译器告诉您不能使用,因为它完全没有必要。您没有要打开的任何可选选项:不是可选的,并且该属性也不是可选的。仅用于解开可选项。如果要创建一个名为的新常量,请执行以下操作: 但是,旁注:具有一个名为参数的参数和一个名为局部常量的参数会造成极大的混淆。这样可能会更好:

  • 问题内容: var firstName: String = “John Appleseed” if let name = firstName { print (“Hello, (name)”) } 第二行出现字符串错误:条件绑定的初始化程序必须具有可选类型,而不是’String’ 如何决定使用可选变量还是非可选变量? 问题答案: 首先,让我们考虑一下构造的含义。当你写 你告诉斯威夫特你想 尝试展开

  • 我正试图编写我自己的“分数”类,它包含两个数字对象:分子和分母。但是,根据这两个参数的数据类型,我希望对象以不同的方式初始化。 例如,如果我声明我希望保持类型。然而,如果我声明我希望被转换为,值为0.42,而不是。 这样做的正确方式是什么? 这感觉非常类似于具有单个对象的元组只返回原始对象的场景。这意味着将设置为类型,而不是类型。

  • 问题内容: 我有以下代码: 在这种情况下,我需要mysql_real_escape_string还是可以吗? 问题答案: 不,在使用准备好的语句时,您不必自己逃避价值 (即,您不需要调用):DB引擎将自己执行该操作。 (实际上,如果您正在调用并使用绑定参数,则您的字符串将被转义两次- 并不是很好:您最终会到处转义字符…) 附带说明:您的值以整数形式传递 (如所示),因此即使您未使用准备好的语句,也

  • 问题内容: 这段代码适用于第一个XCode 6 Beta,但在最新的Beta中,它不起作用,并显示以下错误 : 这就是此类的初始化方式: 我坚持下去..最简单的解决方法是什么? 问题答案: 是SKSpriteNode类中唯一指定的初始值设定项,其余都是方便的初始值设定项,因此您不能在它们上调用super。将代码更改为此: 此外,我会将所有这些整合到一个初始化器中。

  • 我正在使用这个库,对于它的一个类(从ViewGroup扩展而来),在“PLA\u AbsListView.java”中,在CTOR中,有以下几行代码: 最近,我更新了SDK 自从我更新了所有内容后,我一直收到这个错误: PLA\u AbsListView类型的方法initializeScrollbars(TypedArray)未定义 我尝试将API设置为低于21,但没有帮助。 我还试图找出这个函数