2016-12-14 3 views
0

いつものように私はこのコードでいくつかのセルにいくつかのカスタム高さの値を追加しようとしています:持つ問題

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 

    var height:CGFloat! 

    switch indexPath.row { 
    case 5: 
     height = 190 

    case 6: 
     height = 140 

    default: 
     break 
    } 

    return height 

} 

が、このエラーでアプリがクラッシュ: fatal error: unexpectedly found nil while unwrapping an Optional value

私がやりましたこれは何の問題もなく、今回はアプリがクラッシュする前に!どうして ?

+1

'indexPath.row'が5または6でない場合、' height'を何も設定しないので、 'nil'です。 – dan

+0

@dan私は5行目と6行目が利用可能であると確信していますが、私は0,1を試してみましたが、まだクラッシュしています –

答えて

1

あなたは高さの値をインスタンス化する必要が

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 

    var height:CGFloat = 100 

    switch indexPath.row { 
    case 5: 
     height = 190 

    case 6: 
     height = 140 

    default: 
     break 
    } 

    return height 

} 
+1

Ahaありがとう!私はいくつかのデフォルト値を追加するのを忘れました –

+1

また、あなたが本当にそれらを突然変異させるつもりならば、変数を 'var'として宣言するのが最善のプログラミングです。したがって、高さを 'let height:CGFloat'と定義し、switch文の' default = 'に' height = 100'を設定します。それで 'height'は一度だけ設定され、あなたがそれを返す前に変更することはできません。 – par

0

5または6ではない行には、heightを定義しません。 heightを次のように定義してください。 5および6を除くケースで

var height: CGFloat = 100 //Or some other value you need 
0

あなたはheightプロパティに任意の値を設定しないでください。設定既定値:

var height:CGFloat! = 100 

またはdefaultケースを更新:

default: 
    height = 100 
    break 
0

いくつかの値にheightのデフォルト値を設定します。あなたのコードは現在nilの値を返しています。