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

时间:2022-06-05 10:27:26

学习来自《极客学院》

 import Foundation

 //1.定义类和结构体
/*
[修饰符]calss 类名{
零到多个构造器
零到多个属性
零到多个方法
零到多个下标
}
修饰符可以是:private public internal final
*/ /*定义结构体
[修饰符]struct 结构体名{ }
修饰符可以是:private public internal
*/ /*
定义属性的语法
[修饰符] var或者let 存储属性名:类型名 = 初始值 <就是一般的变量声明和定义的方式>
*/ //类的创建以及实例的创建我懂,所以下面直接创建结构体,以及结构体的实例
struct dog{
var name:String
var age:Int
func run(){
println("\(age)岁的\(name)跑步中...")
}
}
var littledog:dog = dog(name: "小狗", age: )
littledog.run() //重点(结构体和类的区别):结构体是值类型,类是引用类型 //内存里的对象可以有多个引用,即多个引用变量指向同一个对象,这个不用多说,下面就直接证明结构体是值类型
var bigdog = littledog
bigdog.name = "大狗"
bigdog.age =
bigdog.run()

运行结果:

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

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

 //
// Class.swift
// Swift的一个类
//
// Created by HEYANG on 16/3/19.
// Copyright © 2016年 HEYANG. All rights reserved.
//
// http://www.cnblogs.com/goodboy-heyang
// https://github.com/HeYang123456789
// import Foundation class OneClass : NSObject{ //=======属性+懒加载=======
//如何自定义一个对象,而对象的属性如果又是基本数据类型,不建议设置为可选类型
//而应该赋值为0,或者-1
var value:Int =
var string:String?
var 闭包: (()->())? //声明一个闭包
/*
懒加载的格式:
lazy var 变量名称:数据类型 = 闭包()
注意:闭包后面的()必须写,代表着执行闭包,将闭包的返回值赋值给变量
*/
lazy var listData:[String]? = {
() -> [String]
in
print("Hello world!")
return ["hello","world"]
}()
// 如果在懒加载中,属性指明了类型,那么闭包中的前面两行就可以省略
lazy var listData2:[String]? = {
print("Hello world!")
return ["hello","world"]
}()
// 如果实际开发中,懒加载的属性比较多,可以这么处理
lazy var listData3:[String]? = self.test()
// 由此可见,闭包就是一个特殊的函数
func test() -> [String]{
print("Hello world!")
return ["hello","world"]
}// 这函数部分可以统一放在别处 // 开发中推荐的写法
lazy var listData4 = {
() -> [String]
in
print("Hello,world!")
return ["Hello","World"]
}() //=======构造方法=======
override init() {
value =
string = "开心"
} //=======自定义构造方法,并使用KVC=======
init(value:Int,string:String) {
// 初始化属性
self.value = value
self.string = string
} init(dict: [String:AnyObject])
{
// 实现字典转模型,必须先手动调用调用父类init方法
super.init()
setValuesForKeysWithDictionary(dict)
} // 如果利用KVC赋值,但是字典和模型的属性不能一一对应,就调用下面的方法
override func setValue(value: AnyObject?,forUndefinedKey key:String){
print("下面是[]的部分就是模型中找不到的属性:")
print("[key:\(key),value:\(value)]")
}
//=======重写description属性=======
override var description: String{
// 优化
let property = ["value","string"]//属性名
let dictKeyValue = dictionaryWithValuesForKeys(property)
return "\(dictKeyValue)" // return "Hello"
}
// 这个description就是属性,不过重写了简化的get方法,就是只读属性 // // 在Swift中只读属性称之为:计算型属性,它不具备存储性能
// // 下面是只读属性的一般写法
// var name:String
// {
// willSet{
// print(name)
// print(newValue)
// }
// didSet{
// print(name)
// print(oldValue)
// }
// }
// var name2:String
// {
// get{
// return "只读属性"
// }
// }// 然后简写成
// var name3:String
// {
//
// return "只读属性"
//
// } //=======析构方法=======
deinit{ }
} //=======知识补充======= /*
声明闭包的时候
错误的写法:var 闭包: ()->()?
正确的写法:var 闭包: (()->())?
因为在"错误的写法:var 闭包: ()->()?"中,代表的是闭包的返回值是可选的,而不是闭包是可选的 */

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