UITableView的实现和Object-C一样,
class OneVC: UIViewController, UITableViewDelegate, UITableViewDataSource {
var tableView: UITableView!
var dataArray: Array<DataModel> = []
let cellID = "CELLID"
//判断是否在编辑状态
var isEdit = false
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.white
self.title = "首页"
//数据源
dataArray = DataModel.modelDatas()
//添加编辑按钮
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "编辑", style: UIBarButtonItemStyle.done, target: self, action: #selector(OneVC.rightClick))
//创建UITableView
tableView = UITableView(frame: UIScreen.main.bounds, style: .plain)
//注册cell
tableView.register(UITableViewCell.classForCoder(), forCellReuseIdentifier: cellID)
//设置代理
tableView.delegate = self
tableView.dataSource = self
//设置行高
tableView.rowHeight = 60
view.addSubview(tableView)
//去掉没有数据的cell的分割线
tableView.tableFooterView = UIView()
}
//导航栏右边的按钮
func rightClick() -> Void {
isEdit = !isEdit
tableView.setEditing(isEdit, animated: true)
}
/* UITableView的代理方法和数据源方法*/
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dataArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//创建cell
let cell = tableView.dequeueReusableCell(withIdentifier: cellID)! as UITableViewCell
//h获取模型数据
let model: DataModel = dataArray[indexPath.row]
cell.textLabel?.text = model.name
cell.imageView?.image = UIImage(named: model.icon!)
cell.detailTextLabel?.text = model.center
return cell
}
//是否允许打开编辑状态
func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
return true
}
//删除某行的cell
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
self.dataArray.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.top)
}
//允许滑动删除
func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {
return UITableViewCellEditingStyle.delete
}
//选择cell
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let model = dataArray[indexPath.row]
let alertController = UIAlertController(title: model.name, message: model.center, preferredStyle: UIAlertControllerStyle.alert)
let alerAction = UIAlertAction(title: "确定", style: UIAlertActionStyle.default, handler: nil)
alertController.addAction(alerAction)
self.present(alertController, animated: true, completion: nil)
}
}
加载plist文件
class DataModel: NSObject {
var name: String?
var icon: String?
var center: String?
var time: String?
init(dict: [String: AnyObject]) {
//KVC是OC特有的机制 oc可以和swift共存
//在运行时 给‘对象’ 转发setValue: forKey:
//KVC 通过键值编码 给对象的属性设置初始值
super.init()
setValuesForKeys(dict)
}
public static func modelDatas() -> Array<DataModel> {
var dataArray = Array<DataModel>()
let plistPath = Bundle.main.path(forResource: "datas", ofType: "plist")
let datas = NSArray(contentsOfFile: plistPath!) as! Array<NSDictionary>
//KVC
for dict in datas {
let model = DataModel(dict: dict as! [String : AnyObject])
dataArray.insert(model, at: dataArray.count)
}
return dataArray
}
}
Swift中表示“类型范围作用域”这一概念有两个不同的关键字,它们分别是static和class。这两个关键字都表达了这个意思,类可以通过static关键字拥有类型存储属性了,static相当于class final标识符的别名,勒种的static属性拥有全局作用域和依赖加载属性,但目前class还不能用来定义类型的存储属性,仅能通过class定义类型计算属性
class MyClass {
class var bar: Bar?
}
编译时就会出现class variables not yet supported的错误这主要是因为Objective-C中就没有类型变量的概念,为了运行时的同意和兼容,暂时没有添加这个特性
网友评论