swift 2016.9.23: 已经更新到 Swift 3.0
从2014年发布以来Swift每年变化还是挺大的,但是随着Swift的使用者越来越多很有必要研究一下了。
我认为IOS编程很大程度上就是TableView编程,在App中各种TableView无所不有,所以我就已简单的Swift TableiView和Swift Objective混编简单入门一下swift。
首先在ViewController中申明一个TableView,然后把它加载到view上。
注意此处tableiView初始化在属性中,而不用卸载method中。
import UIKit
class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource
{
let tableView = UITableView(frame:CGRect(x:0,y:0,width:UIScreen.main.bounds.size.width,
height:UIScreen.main.bounds.size.height) ,
style: UITableViewStyle.plain)
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
tableView.backgroundColor = UIColor.clear
self.view.addSubview(tableView)
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 20
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = MyCell().customCell(tableView: tableView)
cell.loadData(line: indexPath.row, title: "title" + String(indexPath.row))
print(Unmanaged.passUnretained(cell).toOpaque());
return cell;
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let oc = OCViewController()
self.navigationController?.pushViewController(oc, animated: true)
}
func provide(person:String) -> String {
return "hello"
}
自定义Cell
此处我有一个疑问,在oc中NSStringFromClass可以很好的给cell设置标示,而在Swift中没有类似的方法,看到网上有人说String.self()方法,但似乎不起作用,欢迎大家评论留言
import UIKit
class MyCell: UITableViewCell {
@IBOutlet weak var iTitleLabel: UILabel!
@IBOutlet weak var iOrderLabel: UILabel!
func customCell(tableView:UITableView) -> MyCell {
var cell = tableView.dequeueReusableCell(withIdentifier: "MyCell")
if cell == nil{
cell = Bundle.main.loadNibNamed("MyCell", owner: nil, options: nil)?.last as! MyCell?
}
return cell as! MyCell
}
func loadData(line:Int,title:String) {
iOrderLabel.text = String(line)
iTitleLabel.text = title
}
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
self.backgroundColor = UIColor.init(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.1)
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
Swift与Objective的混编
在Swift的工程中新建Objective类,和桥接文件“工程名-Bridging-Header.h”
在桥接文件中引入oc头文件
#import "OCViewController.h"
在oc类文件中条用Swift类需引入Swift默认透头文件“工程名-swift.h”
完整项目见gitHub:
https://github.com/393698063/SwiftAndObjectiveTableview