您的位置:首页 > 移动开发 > Swift

Swift 入门基础(结构体/类)

2015-11-03 14:11 393 查看
import Foundation

print("Hello, World!")

/************结构体(struct)***************/
//1.声明一个结构体
struct Rect
{
// 声明结构体变量的属性(存储属性)
var x:Float
var y:Float
var width:Float
var height:Float

// 声明结构体属性
// 注意:需要使用 static
关键字修饰
static
var description:String?

// 计算属性(专门用于计算其他属性,
并不存储值)
var centerX:Float{
// setter
set(new){
x = new
}
/*
set{
x = newValue
}
*/

// getter
get{
return
x + width /
2
}
}

var centerY:Float{
get{
return
y + width /
2
}
}

// 声明方法
// 声明一个结构体对象(结构体变量)方法[类似于类中的实例(对象)方法]
func info (){
print("x:\(x) y:\(y)
width:\(width) height:\(height)")
}
// 声明结构体方法[类似于类中的类方法]
static
func info1(){
print("这是一个结构体方法")
}
}

// 1.根据结构体类型,
创建结构体对象(结构体变量)
var rect1 = Rect(x:
0, y: 0, width:
100, height: 100)
// 注意:
如果结构体对象是常量, 内部的属性是不允许修改的
// 访问结构体对象的属性 (x,y,width,height)
rect1.x =
20
print(rect1.x)

// 访问结构体属性
Rect.description =
"传说中的结构体"
print(Rect.description!)
// 取值的时候
需要加感叹号! -> 强制解析的意思
去掉 optional

// 使用结构体对象方法
rect1.info()

// 使用结构体方法
Rect.info1()

// 访问结构体对象的计算属性
rect1.centerX =
100 //
调用 centerX 中的 setter
方法
let value = rect1.centerX
// 在使用 centerX
中的 getter 方法
print(value)

/************类(class)的定义和实例*************/
class Person {
var name:String?
var age:Int?
// 构造方法(初始化方法)
init (name:String, age:Int){
self.name = name;
self.age = age;
}
}

// 创建一个 person
对象
var p1:Person =
Person(name: "佩佩", age:
17)
// 访问类中的属性
print("名字是\(p1.name!)")

class Student {
// 声明对象属性
var name:String?
var age:Int?
// 声明类属性
static
var introduce:String?
//(!必须要由值, ?可以为空) [存储属性]
// 声明计算属性
var number:Int{
get{
return
age!
}
set(value){
// 这种写法表示在调用 number
的 set 方法时,
传过来的参数赋值给 value
age = value
// 切记切记: set
方法中不能使用 self. 属性,
会造成死循环
}
}

// 声明类方法
// ****static修饰的类方法不能被子类重写 class
修饰的类方法, 可以被子类重写
static
func sayHi(){
print(introduce)
// 注意类方法中
不能使用对象属性, 只能使用类属性
}
class
func sayHi2(){
print(introduce)
}

// 声明构造方法
init(name:String, age:Int){
self.name = name
self.age = age
}

init(name:String){
self.name = name
}

// 声明对象方法
func sayHello(){
print("我是对象")
}
}

// 继承
class PP:Student{
// 重写父类的类方法
override
class func sayHi2(){
print("我是 pp类,
重写父类的类方法")
}
}

// 多继承(>=2个类)
报错

//
let student = Student(name:
"李四", age:
25)
student.sayHello()
// 使用对象方法
Student.sayHi2()
//使用的是类方法
PP.sayHi2()
// 使用 PP
中重写父类的方法

// 创建 Student
对象
let pp:PP =
PP(name: "小王", age:
23)

/******值类型和引用类型*******/
// 结构体
struct animal {
var name:String?
var age:Int?
}
var dog = animal(name:
"小黄", age:
2)
var dog1 = dog
// 此时, dog1是从 dog拷贝过来的值,
是一份新值
dog.name =
"小花"
print("狗:\(dog.name!),
狗一:\(dog.name!)")

// 类
class animal1 {
var name:String?
var age:Int?
init (name:String, age:Int){
self.name = name
self.age = age
}
}
var cat = animal(name:
"小黄", age:
3)
var cat1 = cat
// 此时, dog1是从 dog拷贝过来的值,
是一份新值
cat.name =
"小花"
print("狗:\(cat.name!),
狗一:\(cat1.name!)")
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: