2016-05-10 15 views
0

私はSwiftでサイドバーを構築しています。 そして私は、このコードでは、このエラーを得た:タイプ 'UIColor'の値を 'String'に割り当てることができません。

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    var cell:UITableViewCell! = tableView.dequeueReusableCellWithIdentifier("cell")! as UITableViewCell 

    if cell == nil{ 
     cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "Cell") 

     cell!.backgroundColor = UIColor.clearColor() 
     cell!.textLabel!.text = UIColor.darkTextColor() 
    } 

    // Configure the cell... 

    return cell 
} 

だから、実際には同じ問題を抱えているこのプラットフォーム上の誰かがそこにあります。ソリューションでは、彼らは私がUIColor.darkTextColor()背後!を追加する必要がありますが、言った、私は私が!

エラーを削除する必要が別のエラーがあることを行う場合の行にあります!

セル.textLabel!

あなたは何が起こっているのか知っていますか?

+1

エラーメッセージは何ですか? –

+0

@JeffPuckettIIタイトルに? – Hamish

答えて

1

エラーは、このコードに起因するものである:

cell!.textLabel!.text = UIColor.darkTextColor() 

あなたはStringUILabeltext性)であることが期待プロパティにUIColorを割り当てます。

は、私はあなたがのようにコードを変更する必要がある場合、あなたはおそらく、text colorを変更するために探していると思う:

cell!.textLabel!.textColor = UIColor.darkTextColor() 
+0

私はXcodeを初めて使用しているので、代わりに何を書くべきですか? –

+0

答えの最後の行はあなたが代わりに書くべきものです – dan

+0

ありがとうございました! –

0

問題は、あなたがStringUIColorを割り当てるしようとしているです。あなたがそうのように、代わりにセルのtextLabeltextColorプロパティを使用したい:

cell.textLabel?.textColor = UIColor.darkTextColor() 

はまた、あなたは、再利用可能なセル識別子のミスマッチ(新しく作成されたもののために"Cell"、それらをフェッチする"cell")を持っていることに注意してください。


ただし、ここには大きな問題があります。

コンパイラのエラーを解決するには、実際にはcrash operators!)を捨てるべきではありません。確かに、それは完全に安全かもしれません(あなたが== nilチェックをしているように) - しかし、実際に使用すべきではない場所での将来の使用を奨励します。将来のコードリファクタリングにはかなり危険です。

nil-coalescing演算子(??)を利用するコードを書き直すことをお勧めします。これを使用して再利用可能なセルを取得しようとすることができます。それが失敗した場合は、代わりに新しく作成されたものに置き換えることができます。共通のセル設定を行うために、自動実行クロージャ({...}())を使用することもできます。例えば

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    // attempt to get a reusable cell – create one otherwise 
    let cell = tableView.dequeueReusableCellWithIdentifier("foo") ?? { 

     // create new cell 
     let cell = UITableViewCell(style: .Default, reuseIdentifier: "foo") 

     // do setup for common properties 
     cell.backgroundColor = UIColor.redColor() 
     cell.selectionStyle = .None 

     // assign the newly created cell to the cell property in the parent scope 
     return cell 
    }() 

    // do setup for individual cells 
    if indexPath.row % 2 == 0 { 
     cell.textLabel?.text = "foo" 
     cell.textLabel?.textColor = UIColor.blueColor() 
    } else { 
     cell.textLabel?.text = "bar" 
     cell.textLabel?.textColor = UIColor.greenColor() 
    } 

    return cell 
} 

は、今では!があなたのコード内で属しているかどうかを見分けるのは簡単です。それは...エルはしません。

あなたの問題を解決するために余分なクラッシュ演算子をコードに追加することをお勧めする人は信頼しないでください。それだけでより多くの問題の源になります。

関連する問題