1. ホーム
  2. ios

[解決済み] 条件付きバインディング:letエラーの場合 - 条件付きバインディングのイニシャライザーはOptional型でなければならない

2022-02-12 07:57:24

質問

データソースから行を削除しようとしているのですが、次のようなコード行があります。

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 optionalバインディングは、式の右辺の結果がオプショナルである場合にのみ機能します。 右辺の結果がオプショナルでない場合、このオプショナルバインディングは使えません。 このオプショナルバインディングのポイントは 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 に変更します。 tableView .