Swift面向对象基础(上)——Swift中的类和结构体(上)

简介:

学习来自《极客学院》

复制代码
 1 import Foundation
 2  3 //1.定义类和结构体  4 /*  5 [修饰符]calss 类名{
 6  零到多个构造器
 7  零到多个属性
 8  零到多个方法
 9  零到多个下标
10 }
11 修饰符可以是:private public internal final
12 */ 13 14 /*定义结构体
15 [修饰符]struct 结构体名{
16 17 }
18 修饰符可以是:private public internal
19 */ 20 21 /* 22 定义属性的语法
23 [修饰符] var或者let 存储属性名:类型名 = 初始值 <就是一般的变量声明和定义的方式>
24 */ 25 26 //类的创建以及实例的创建我懂,所以下面直接创建结构体,以及结构体的实例 27 struct dog{
28  var name:String
29  var age:Int
30  func run(){
31 println("\(age)岁的\(name)跑步中...")
32  }
33 }
34 var littledog:dog = dog(name: "小狗", age: 5)
35 littledog.run()
36 37 //重点(结构体和类的区别):结构体是值类型,类是引用类型
38 39 //内存里的对象可以有多个引用,即多个引用变量指向同一个对象,这个不用多说,下面就直接证明结构体是值类型 40 var bigdog = littledog
41 bigdog.name = "大狗" 42 bigdog.age = 9 43 bigdog.run()
复制代码

运行结果:

Swift的一个代码(有关swift懒加载、使用了KVC定义模型):

复制代码
 1 //  2 // Class.swift
 3 // Swift的一个类
 4 //  5 // Created by HEYANG on 16/3/19.
 6 // Copyright © 2016年 HEYANG. All rights reserved.
 7 //  8 // http://www.cnblogs.com/goodboy-heyang  9 // https://github.com/HeYang123456789  10 //
 11  12 import Foundation
 13  14 class OneClass : NSObject{
 15  16 //=======属性+懒加载=======
 17 //如何自定义一个对象,而对象的属性如果又是基本数据类型,不建议设置为可选类型
 18 //而应该赋值为0,或者-1  19 var value:Int = 0  20 var string:String?
 21 var 闭包: (()->())? //声明一个闭包  22 /*  23  懒加载的格式:
 24  lazy var 变量名称:数据类型 = 闭包()
 25  注意:闭包后面的()必须写,代表着执行闭包,将闭包的返回值赋值给变量
 26 */  27 lazy var listData:[String]? = {
 28 () -> [String]
 29 in  30 print("Hello world!")
 31 return ["hello","world"]
 32  }()
 33 // 如果在懒加载中,属性指明了类型,那么闭包中的前面两行就可以省略  34 lazy var listData2:[String]? = {
 35 print("Hello world!")
 36 return ["hello","world"]
 37  }()
 38 // 如果实际开发中,懒加载的属性比较多,可以这么处理  39 lazy var listData3:[String]? = self.test()
 40 // 由此可见,闭包就是一个特殊的函数  41 func test() -> [String]{
 42 print("Hello world!")
 43 return ["hello","world"]
 44 }// 这函数部分可以统一放在别处
 45  46 // 开发中推荐的写法  47 lazy var listData4 = {
 48 () -> [String]
 49 in  50 print("Hello,world!")
 51 return ["Hello","World"]
 52  }()
 53  54 //=======构造方法=======  55 override init() {
 56 value = 22  57 string = "开心"  58  }
 59  60 //=======自定义构造方法,并使用KVC=======  61 init(value:Int,string:String) {
 62 // 初始化属性  63 self.value = value
 64 self.string = string  65  }
 66  67  init(dict: [String:AnyObject])
 68  {
 69 // 实现字典转模型,必须先手动调用调用父类init方法  70  super.init()
 71  setValuesForKeysWithDictionary(dict)
 72  }
 73  74 // 如果利用KVC赋值,但是字典和模型的属性不能一一对应,就调用下面的方法  75 override func setValue(value: AnyObject?,forUndefinedKey key:String){
 76 print("下面是[]的部分就是模型中找不到的属性:")
 77 print("[key:\(key),value:\(value)]")
 78  }
 79 //=======重写description属性=======  80 override var description: String{
 81 // 优化  82 let property = ["value","string"]//属性名  83 let dictKeyValue = dictionaryWithValuesForKeys(property)
 84 return "\(dictKeyValue)"  85  86 // return "Hello"  87  }
 88 // 这个description就是属性,不过重写了简化的get方法,就是只读属性
 89  90 // // 在Swift中只读属性称之为:计算型属性,它不具备存储性能
 91 // // 下面是只读属性的一般写法
 92 // var name:String
 93 // {
 94 // willSet{
 95 // print(name)
 96 // print(newValue)
 97 // }
 98 // didSet{
 99 // print(name)
100 // print(oldValue)
101 // }
102 // }
103 // var name2:String
104 // {
105 // get{
106 // return "只读属性"
107 // }
108 // }// 然后简写成
109 // var name3:String
110 // {
111 // 112 // return "只读属性"
113 // 114 // }
115 116 117 //=======析构方法======= 118  deinit{
119 120  }
121 }
122 123 //=======知识补充======= 124 125 /* 126 声明闭包的时候
127  错误的写法:var 闭包: ()->()?
128  正确的写法:var 闭包: (()->())?
129 因为在"错误的写法:var 闭包: ()->()?"中,代表的是闭包的返回值是可选的,而不是闭包是可选的
130 131 */
复制代码

源码下载:链接: http://pan.baidu.com/s/1skuEwWl 密码: 3psc


相关文章
|
1月前
|
存储 定位技术 Swift
Swift 中的枚举与结构体,包括它们的定义、特性、使用场景及示例
本文深入探讨了 Swift 中的枚举与结构体,包括它们的定义、特性、使用场景及示例。枚举适合表示有限的、离散的状态或选项,结构体则适用于具有特定属性和行为的数据结构。两者在存储方式、继承性和灵活性上有所不同,但在实际开发中常结合使用,以充分发挥各自优势。
34 3
|
1月前
|
存储 Swift 开发者
Swift 是一种现代编程语言,支持面向对象编程(OOP),包括类、对象、继承、多态等核心概念
Swift 是一种现代编程语言,支持面向对象编程(OOP),包括类、对象、继承、多态等核心概念。通过这些特性,Swift 能够帮助开发者构建结构清晰、可维护性强的代码。本文介绍了 Swift 中 OOP 的基本概念、高级特性和实际应用,并通过一个简单的 `Car` 类示例展示了如何在 Swift 中实现面向对象编程。
23 1
|
1月前
|
Swift 索引 容器
Swift 泛型-关联类
Swift 泛型-关联类
23 1
|
2月前
|
Swift
Swift 中 struct(结构体)和 class(类)的区别
【10月更文挑战第10天】理解 struct 和 class 的区别对于正确使用 Swift 语言进行编程非常重要。在实际开发中,需要根据具体的需求和场景来选择合适的数据类型,以充分发挥它们的优势,提高代码的质量和效率。
|
1月前
|
存储 Swift iOS开发
Swift 类
10月更文挑战第29天
13 0
|
1月前
|
Swift iOS开发
Swift 结构体
10月更文挑战第28天
29 0
|
7月前
Swift4.0判断本函数是否在其它类有相同的方法
Swift4.0判断本函数是否在其它类有相同的方法
46 0
|
7月前
|
安全 Swift 开发者
【Swift开发专栏】Swift类的继承与多态
【4月更文挑战第30天】Swift中的OOP聚焦于类继承与多态,提供代码复用和类型安全。继承通过`class`和冒号实现,子类继承父类属性和方法,支持单继承以降低复杂性。多态借助协议和类型兼容实现,允许统一处理不同类型的对象。继承用于构建复杂类,多态则使代码更通用、可扩展。理解并运用这些概念对Swift开发者至关重要。
62 0
|
7月前
|
存储 定位技术 Swift
【Swift 开发专栏】Swift 中的枚举与结构体
【4月更文挑战第30天】本文探讨了Swift中的枚举与结构体,包括它们的定义、用法及差异。枚举用于表示有限状态或选项,如游戏状态;结构体适合表示具有特定属性和行为的数据,如商品信息。两者均可定义属性和方法,作为函数参数。枚举以整数存储,不可继承,结构体按属性存储且可继承,更灵活。理解两者特点有助于提升编程效率。
40 0
|
7月前
|
存储 数据处理 Swift
在Swift中,类(class)和结构体(struct)
在Swift中,类(class)和结构体(struct)
76 1