テーブルビューを作成中の「Cannot use instance member....」エラー
セクションに日付、セルにチェック項目を表示させるテーブルビューを作成中、tableDataの定義のところに「Cannot use instance member 'checkListItem1' within property initializer; property initializers run before 'self' is available」というエラーが出てしまいました。これを解決するには、どのようにすれば良いのでしょうか。ご回答に心から感謝いたします。
import UIKit
class ViewController : UIViewController, UITableViewDelegate, UITableViewDataSource {
////
func numberOfSections(in tableView: UITableView) -> Int // Default is 1 if not implemented
{ return sectionTitle.count
}
////
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? // fixed font style. use custom view (UILabel) if you want something different
{
return sectionTitle[section]
}
// ステータスバーの高さ、上にカレンダーかデイトピッカーを置く。
let statusBarHeight = UIApplication.shared.statusBarFrame.height + 200
//セクションの項目
var sectionTitle = ["H28,01,23","H27,12,31","H28,01,12","H28,02,21","H28,11,10"]
// チェックリストの項目とチェック状態
var checkListItem1: [String : Bool] = [
"アイテム1" : true,
"アイテム2" : false,
"アイテム3" : true,
"アイテム4" : true,
"アイテム5" : false
]
var checkListItem2: [String : Bool] = [
"アイテム2-1" : false,
"アイテム2-2" : true,
"アイテム2-3" : true,
"アイテム2-4" : true,
"アイテム2-5" : false
]
var checkListItem3: [String : Bool] = [
"アイテム3-1" : true,
"アイテム3-2" : true,
"アイテム3-3" : true,
"アイテム3-4" : true,
"アイテム3-5" : false
]
var checkListItem4: [String : Bool] = [
"アイテム4-1" : true,
"アイテム4-2" : false,
"アイテム4-3" : true,
"アイテム4-4" : false,
"アイテム4-5" : false
]
var checkListItem5: [String : Bool] = [
"アイテム5-1" : true,
"アイテム5-2" : false,
"アイテム5-3" : true,
"アイテム5-4" : true,
"アイテム5-5" : true
]
var tableData = [checkListItem1, checkListItem2, checkListItem3, checkListItem4, checkListItem5]
let tableView = UITableView()
override func viewDidLoad() {
super.viewDidLoad()
// UITableView の作成
tableView.frame = CGRect(
x: 0,
y: statusBarHeight,
width: self.view.frame.width,
height: self.view.frame.height - statusBarHeight
)
tableView.delegate = self
tableView.dataSource = self
self.view.addSubview(tableView)
}
// セルの作成
//
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// Dictonary のキーの配列を取得
var keys = [String](tableData.keys)
// キーで並び替え
keys.sort()
// キーの文字列を取得
let cellText = keys[indexPath.row]
// セルの作成とテキストの設定
let cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
cell.textLabel?.text = cellText
///
let sectionData = tableData[(indexPath as NSIndexPath).section]
let cellData = sectionData[(indexPath as NSIndexPath).row]
// チェック状態が true なら、初めからチェック状態にする
if self.tableData[cellText]! {
cell.imageView?.image = UIImage(named: "checked")
} else {
cell.imageView?.image = UIImage(named: "unchecked")
}
return cell
}
// セルがタップされた時の処理
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let cell = tableView.cellForRow(at: indexPath) {
// タップしたセルのテキストを取得
let cellText = cell.textLabel?.text
// 画像を切り替えと Dictonary の値を変更
if cell.imageView?.image == UIImage(named: "checked") {
self.tableData.updateValue(false, forKey: cellText!)
cell.imageView?.image = UIImage(named: "unchecked")
} else {
self.tableData.updateValue(true, forKey: cellText!)
cell.imageView?.image = UIImage(named: "checked")
}
// 選択状態を解除
cell.isSelected = false
}
}
// func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
// return 56
// }
///
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let sectionData = tableData[section]
return self.tableData.count
}
}