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


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!)")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值