标签:
//MARK: - ?(可选类型)和!(强制解包)的区别
var number : Int?
var number1 = number!//程序会崩溃(如果对值为nil的变量进行强制解包,会造成程序崩溃)
//MARK: - 结构体
1 //1.声明一个结构体
2 struct Rect {
3 //声明结构体变量的属性(存储属性)
4 var x : Float
5 var y : Float
6 var width : Float
7 var heighy : Float
8 //声明结构体属性,要使用static
9 static var description : String?
10 //声明一个计算属性(是用来专门计算结构体变量属性的setter方法和getter方法,其本身没有存储功能)
11 var centerX : Float{
12 //setter方法
13 set{
14 x = newValue
15 }
16 //getter方法(必须有)
17 get {
18 return x/2
19 }
20 }
21 var centerY:Float{
22 get {
23 return y/2
24 }
25 }
26 //声明方法 声明一个结构体变量方法(相当于OC中的实例方法)
27 func frameInfor(){
28 print("x:\(x), y:\(y),width:\(width),height:\(heighy)")
29 }
30 //声明一个结构体方法(相当于OC中的类方法),使用static修饰
31 static func info(){
32 print("这是结构体方法");
33 }
34 }
35 //2.根据结构体去定义一个结构体变量
36 var frame = Rect(x: 20, y: 20, width: 100, heighy: 100)
37 //3.访问结构体变量中的属性(通过点语法)
38 frame.x = 20
39 print(frame.x)
40
41 //4.访问结构体属性
42 Rect.description = "我是结构体属性"
43
44 print(Rect.description!)
45
46 //5.访问计算属性
47 frame.centerX = 200; //这句话就相当于在调用centerX的setter方法
48 let value = frame.centerX //这句话就相当于在调用centerX的getter方法
49 print(value)
50 //6.调用结构体变量方法
51 frame.frameInfor()
52 //7.调用结构体变量
53 Rect.info()
//MARK: - 类(class)
1 class Person {
2 var name:String?
3 var age:Int?
4 //构造初始化方法
5 init(name:String,age:Int) {
6 self.name = name
7 self.age = age
8 }
9 //自定义初始化方式
10 init(name:String) {
11 self.name = name
12 }
13 //声明类属性
14 static var introduce:String?
15 //声明计算属性//在写计算属性的时候不能出现self.否则会造成死循环
16 var value:Int{
17 set(a) {
18 age = a
19 }
20 get{
21 return age!
22 }
23 }
24 //声明类方法两种方法
25 //1.在类方法前边加上static修饰【虽然是一个类方法,但是该方法在子类中不能进行重写】
26 static func sayHi(){
27 print(introduce!)//注意:在类方法中只能使用类属性,不能使用对象属性
28 }
29 //2.在类方法前边加上class修饰【它是一个类方法,可以被子类重写】
30 class func sayHello() {
31 print(introduce!)
32 }
33 //声明一个实例方法
34 func sayHi2(){
35 print("hello,我是实例方法")
36 }
37 }
38
39 //1.创建对象(注意:要初始化对象一定要写初始化构造的方法)
40 var person1 : Person = Person(name: "盖伦", age: 22)
41 //2.访问类中的属性(对象属性)
42 print(person1.name!)
43 //3.访问类方法
44 Person.introduce = "我是类方法"
45 //4.访问计算属性
46 person1.value = 28
47 //print(person1.value)
48 //5.访问类方法
49 Person.sayHello()
50 Person.sayHi()
51 //6.访问实例方法
52 person1.sayHi2()
53 //7.定义一个子类Student,继承Person -————在swift中不支持多继承
54 class Student : Person {
55 //重写父类的方法
56 //重写父类的类方法
57 override class func sayHello() {
58 print("我是Student类,重写了父类(Person)的类方法")
59 }
60
61 //重写父类中的实例方法
62 override func sayHi2() {
63 print("我是子类,student类,重写了父类中的实例方法")
64 }
65 }
66
67 //初始化Student对象
68 var student = Student(name: "赵信", age: 12)
69 //调用
70 Student.sayHello()
71 student.sayHi2()
//MARK: - 值类型和引用值类型的区别(注意两个类型的打印结果)
1 //值类型
2 struct animal{
3
4 var name:String?
5 var age:Int?
6 init(name:String,age:Int){
7 self.name = name
8 self.age = age
9 }
10 }
11 var dog1 = animal(name: "藏獒", age: 2)
12 var dog2 = dog1
13 dog1.name = "换换"
14 print("dog1.name:\(dog1.name!)")//打印结果为:欢欢
15 print("dog2.name:\(dog2.name!)")//打印结果为:藏獒
16 //引用值类型
17 class animal1{
18
19 var name:String?
20 var age:Int?
21 init(name:String,age:Int){
22 self.name = name
23 self.age = age
24 }
25 }
26 var dog3 = animal1(name: "贝贝", age: 12)
27 var dog4 = dog3
28 dog3.name = "欢欢"
29 print("dog3.name:\(dog3.name!)")//打印结果为:欢欢
30 print("dog4.name:\(dog4.name!)")//打印结果为:欢欢
//MARK: - 协议(protocol)
1 //使用swift声明协议的时候,协议里需要使用可选方法,使用@objc关键字修饰
2 @objc protocol CookDelegate{
3 func potato()
4 func tomato()
5 optional func meat()
6 }
7 //协议中没有可选方法
8 protocol DrinkDelegate{
9 func drink()//
10 }
11 //如果一个类要遵循协议的时候,如果这个类有父类,要在:后先写父类,然后,再写要遵循的协议
12 class Man: Person,CookDelegate,DrinkDelegate {
13 @objc func potato() {
14 print("土豆")
15 }
16 @objc func tomato() {
17 print("西红柿")
18 }
19 func drink() {
20 print("喝酒")
21 }
22 }
23 //创建一个男人
24 let man = Man(name: "韦小宝", age: 22)
25 man.potato()
26 man.tomato()
27 man.drink()
//MARK: - 扩展(Extension)
1 //1.扩展协议中的相关方法
2 extension Man{
3 @objc func meat() {
4 print("吃肉")
5 }
6 }
7 man.meat()
8 //2.扩展还可以扩展类方法(给某一个类添加方法,类似于OC中的Category)以及对象方法
9 extension Man{
10 //扩展一个对象方法
11 func sing(){
12 print("你存在我深深的脑海里,我的脑海里,脑海里,里")
13 }
14 //扩展一个类方法
15 class func sleep() {
16 print("多喝水多喝水,多休息,多休息")
17 }
18 }
//MARK: - 闭包
1 //求两个数的最大值
2 /*
3 在OC中使用Block实现
4 int (^myBlock)(int num1, int num2) = ^int (int num1, int num2) {
5 return num1 > num2 ? num1:num2;
6 }
7 */
8 //使用闭包(里面的小括号是参数)指向返回值类型
9 var myBlock : ((num1:Int, num2:Int)->Int)
10
11 //第一种使用方式
12 myBlock = {
13 (num1:Int, num2:Int)->Int in //进入闭包里面
14 return num1 > num2 ? num1 : num2
15 }
16
17 //第二种方式
18 myBlock = {
19 num1,num2 in
20 return num1 > num2 ? num1 : num2
21 }
最后是一个通讯录的小工程:
所需创建的文件列表
“ContactListTableViewController”联系人控制器,用于显示联系人;“AddContactViewController”添加联系人时跳转到的界面;“ContactModel”联系人模型;“DataManager”封装对数据的处理方法;注意::不需要引入任何头文件
DataManager文件代码:
1 class DataManager: NSObject {
2 //声明存储联系人的数组
3 var contactArray = Array<ContactModel>()
4 //声明计算属性,计算数组的个数
5 var count:Int {
6 get{
7 return contactArray.count
8 }
9 }
10 //创建单例对象
11 //为了防止外部不会再次初始化
12 private override init() {
13 }
14 static let shareInstence = DataManager()
15 //添加联系人
16 func addContactToArray(newContact:ContactModel) {
17 self.contactArray.append(newContact)
18 }
19 //根据下标去展示相关的联系人(根据下标取model对象)
20 func contactAtIndexFromArray(index:Int) ->ContactModel {
21 return self.contactArray[index]
22 }
23 //更新联系人的方法
24 func updateContactInArray(newContact:ContactModel,index:Int) ->Void{
25 //老数据删除
26 self.contactArray.removeAtIndex(index)
27 //新数据插入
28 self.contactArray.insert(newContact, atIndex: index)
29 }
30 //删除联系人
31 func deleteContactFromArray(index:Int)->Void {
32 self.contactArray.removeAtIndex(index)
33
34 }
35 }
“ContactModel”联系人模型,代码:
1 class ContactModel: NSObject {
2 var name:String?
3 var phone:String?
4
5 init(name:String,phone:String) {
6 super.init()
7 self.name = name
8 self.phone = phone
9 }
10
11 }
“ContactListTableViewController”联系人控制器,代码
1 class ContactListTableViewController: UITableViewController {
2
3 override func viewDidLoad() {
4 super.viewDidLoad()
5
6 //创建一个添加按钮
7 let leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Add, target: self, action: Selector("addButtonAction"))
8
9 self.navigationItem.leftBarButtonItem = leftBarButtonItem
10 }
11 //MARK: - 添加按钮的响应方法
12 func addButtonAction() {
13 //跳转新的界面
14 let addVC = AddContactViewController()
15 //实现闭包的回调
16 addVC.myBlock = {
17 (str)->Void in
18 print(str)
19 self.tableView.reloadData()
20 }
21 self.navigationController?.pushViewController(addVC, animated: true)
22 }
23 // MARK: - Table view data source
24 //section
25 override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
26 return 1
27 }
28 //row
29 override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
30 return DataManager.shareInstence.contactArray.count
31 }
32 //cell
33 override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
34 var cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier")
35 if cell == nil {
36 cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "reuseIdentifier")
37 }
38 //先取出联系人
39 let contact = DataManager.shareInstence.contactAtIndexFromArray(indexPath.row)
40 cell?.textLabel?.text = contact.name
41 cell?.detailTextLabel?.text = contact.phone
42 return cell!
43 }
44 //实现选中cell跳转下一界面进行值的修改
45 override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
46 let addVC = AddContactViewController()
47 //这里需要将联系人的姓名和电话传到下个textField中,此时需要借助属性传值
48 let contact = DataManager.shareInstence.contactAtIndexFromArray(indexPath.row)
49 addVC.contact = contact
50 addVC.index = indexPath.row
51 //闭包的回调
52 addVC.myBlock = {
53 (str)->Void in
54 print(str)
55 self.tableView.reloadData()
56 }
57 self.navigationController?.pushViewController(addVC, animated: true)
58 }
59
60 // Override to support editing the table view.//侧滑删除
61 override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
62 if editingStyle == .Delete {
63 // Delete the row from the data source
64
65 DataManager.shareInstence.deleteContactFromArray(indexPath.row)
66 tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
67
68 } else if editingStyle == .Insert {
69 // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
70 }
71 }
72 }
“AddContactViewController”添加联系人时跳转到的界面,代码,
1 //定义一个有参无返的block
2 typealias BLOCK = (_:String)->Void
3 class AddContactViewController: UIViewController {
4
5 //声明控件属性
6 var nameTextField:UITextField?
7 var phoneTextField:UITextField?
8 var saveButton:UIButton?
9
10 //声明一个闭包
11 var myBlock:BLOCK?
12
13 //声明用于接收上个界面传过来的联系人对象
14 var contact:ContactModel?
15 //声明用于接收cell位置的属性
16 var index:Int?
17
18 override func viewDidLoad() {
19 super.viewDidLoad()
20 self.view.backgroundColor = UIColor.whiteColor()
21 //设置控件frame
22 self.nameTextField = UITextField(frame: CGRect(x: 30, y: 100, width: self.view.frame.size.width - 60, height: 40))
23 self.phoneTextField = UITextField(frame: CGRect(x: 30, y: 140, width: self.view.frame.size.width - 60, height: 40))
24 //进行判断显示相关textField中的内容
25 if contact != nil {
26 self.nameTextField?.text = contact?.name
27 self.phoneTextField?.text = contact?.phone
28 } else{
29 self.nameTextField?.placeholder = "请输入要添加的联系人的姓名"
30 self.phoneTextField?.placeholder = "请输入联系方式"
31 }
32 self.view.addSubview(self.nameTextField!)
33 self.view.addSubview(self.phoneTextField!)
34 //保存按钮
35 self.saveButton = UIButton(type: UIButtonType.Custom)
36 self.saveButton?.frame = CGRect(x: 30, y: 180, width: self.view.frame.size.width - 60, height: 40)
37 self.saveButton?.addTarget(self, action: Selector("saveAction"), forControlEvents: UIControlEvents.TouchUpInside)
38 self.saveButton?.setTitle("保存", forState: UIControlState.Normal)
39 self.saveButton?.backgroundColor = UIColor.cyanColor()
40 self.view .addSubview(self.saveButton!)
41 }
42 //MARK: - 保存按钮的响应方法
43 func saveAction() {
44 //分析contact对象是否为空,如果为空,当前操作是添加操作,否则为修改操作
45 //点击保存按钮将新的model类添加到数组中
46 let newContact = ContactModel(name: (self.nameTextField?.text)!, phone: (self.phoneTextField?.text)!)
47 if contact != nil{
48 //修改操作
49 DataManager.shareInstence.updateContactInArray(newContact, index: index!)
50 } else{
51 //保存操作
52 DataManager.shareInstence.addContactToArray(newContact)
53 }
54 //先在当前界面响应一下block
55 self.myBlock!("添加联系人")
56 self.navigationController?.popViewControllerAnimated(true)
57
58 }
59 }
以上只是swift的一些简单应用,仅供参考。
标签:
原文地址:http://www.cnblogs.com/bdlfbj/p/5532721.html