/*
类的基本定义
Swift中的结构体和类非常相似, 但是又有不同之处
类是具有相同属性和方法的抽象
格式:
class 类名称 {
类的属性和方法
}
*/
class Rect {
var width:Double = 0.0
var height:Double = 0.0
func show() -> Void{
print("width = \(width) height = \(height)")
}
}
// 类没有逐一构造器
//var r1 = Rect(width: 10.0, height: 10.0)
var r1 = Rect()
r1.show()
var r2 = r1
r2.show()
// 类是引用类型, 结构体之间的赋值其实是将r2指向了r1的存储控件, 所以他们是两个只想同一块存储空间, 修改其中一个会影响到另外一个
r1.width = 99
r1.show()
r2.show()
/*
恒等运算符, 用于判断是否是同一个实例, 也就是是否指向同一块存储空间
=== !==
*/
var r3 = Rect()
if r1 === r3
{
print("指向同一块存储空间")
}
第二、类的定义
import UIKit
class Student : NSObject {
// 1.属性
// 1> 存储属性
// 注意一:在开发中,如果是对象或者结构体,在没有赋值的情况下通常定义为可选类型
var name : String?
// 注意二:在开发中,如果是基本属性类型,比如int类型,在没有赋值的情况下,通常直接给一个默认的值0
var age : Int = 0
var chineseScore : Double = 0.0
var mathScore : Double = 0.0
// 2> 计算属性
/*
var average : Double {
get {
return (chineseScore + mathScore) * 0.5
}
// 较少写set方法(默认情况下,set方法中有一个系统变量:newValue.新传入的值就再newValue中)
set {
self.average = newValue
}
}
*/
// 如果计算属性是一个只读属性,则可以省略get{}
var average : Double {
return (chineseScore + mathScore) * 0.5
}
// 3> (了解)类属性
// 注意:
// * 类属性用static修饰
// * 类属性只能通过类来访问
static var courseCount = 0
}
// 创建类的对象
let stu : Student = Student()
stu.name = "yz"
stu.age = 11
stu.chineseScore = 61.5
stu.mathScore = 97.8
if let tempName = stu.name {
print("name is \(stu.name!), age is \(stu.age), 语文成绩:\(stu.chineseScore), 数学成绩:\(stu.mathScore)")
}
// 获取yz老师的平均成绩
print(stu.average)
Student.courseCount = 2
print(Student.courseCount)
class Person : NSObject {
var name : String?
var age : Int = 0
var height : Double = 0.0
}
let p = Person()
// 注意:赋值不是调用set方法,直接拿到属性给属性赋值
p.name = "why"
p.age = 18
p.height = 1.88
第三、类型转换
/*
Swift不允许隐式类型转换, 但可以使用显示类型转换(强制类型转换)
OC:
int intValue = 10;
double doubleValue = (double)intValue;
Swift:
*/
var intValue:Int = 10
var doubleValue:Double
doubleValue = Double(intValue)
// 注意:Double()并不会修改intValue的值, 而是通过intValue的值生成一个临时的值赋值给doubleValue
print(intValue)
print(doubleValue)