您的当前位置:首页正文

Swift 略讲 (2)

来源:图艺博知识网

//定义一个可选类型,表示这个变量可以为nil
var intNumber : Int? = 100

//!表示强制解包
//在使用的时候 在变量后面添加一个! 表示拆包,可以取得真正的值
print(intNumber)
print(intNumber!)

效果图


//使用struce定义一个结构体
// 格式 struct + 结构体名字 {  (结构体实现)  }
struct Frame {
    //存储属性  负责存储值得属性
    var x : Float
    var y : Float
    var width : Float
    var height : Float
    
    
    //计算属性 负责将存储属性进行运算获得值的属性 自己实现get方法
    // get 方法 在属性类型后面添加{} 使用get 关键字声明和实现get方法
    // set 方法 同上
    // set 方法不可以单独出现,必须搭配着get方法才可以出现,但是get方法可以单独出现
    
    var centerX : Float {
        get {
            return x + width / 2
        }
    }
    
    var centerY : Float {
        get {
            return y + height / 2
        }
    }
    
    //结构体属性
    static var myStruct = "asdfg"
    
    //结构体中可以声明和实现一个函数
   func sayHI() {
        print("你好,我是一个方法")
    }

    // init 方法 要把所有的存储属性放进去
    init (x newX : Float , y newY : Float , width newWidth : Float ,
 height newHeight : Float) {
        x = newX
        y = newY
        width = newWidth
        height = newHeight
    }
    //结构体方法
    //结构体方法只能调用结构体属性
    static func sayMy() {
        print(self.myStruct)
    }
}

Frame.sayMy()
//不带static 调不出来sayHI()

Paste_Image.png

</br>

//创建一个对象的方式,都是调用init方法
//第一种
var frame : Frame = Frame.init(x: 10, y: 10, width: 100, height: 100)

//第二种
var frame1 : Frame = Frame.init(x: 10, y: 10, width: 100, height: 100)

print("第一种 : \(frame)")
print("第二种 : \(frame1)")
print(frame1.centerX)
//调出sayHI()
frame.sayHI()
Paste_Image.png

</br>


// class + 类名 + { 类的实现 }
class Person {
  //当给一个类写属性的时候,这个属性如果没有初值那就需要可选类型
    var name : String?
    var gender : String?
    var age : Int?
    
    var width : Float {
        get {
            return 200
        }
        set {
            //set 方法中的newValue
            self.width = newValue
        }
    }
    //static 修饰的是类属性
    //类属性只能由类函数调用
    static var hobby : String? = "卡卡"
    
    //普通函数里面不能调用类属性
    func sayHI() {
        print("你好啊 width : \(self.width)")
    }
    init(name newName : String , gender newGender : String , age newAge : Int) {
       name = newName
       gender = newGender
       age = newAge
    }
    static func sayMy() {
        print(self.hobby!)
    }
}
Person.sayMy()

let person1 : Person = Person(name: "闪闪", gender: "男", age: 11)

person1.sayHI()
print(person1.name! , person1.age! , person1.gender!)

效果图

Paste_Image.png

</br>

class School {
    var teacher : String?
    var student : String?
    
    var name : String? {
        get {
            return "卡卡"
        }
        set {
            //set方法中的newValue 表示数值
            self.name = newValue
        }
    }
  //static 修饰的是类属性
   //类 属性只能由类函数调用
    var age : Int? = 22
    
    func sayHI() {
       print("老师是 : \(self.name!) , 年龄是 : \(self.age!)")
    }
    
    init(teacher newTeacher : String , student newStudent : String) {
      teacher = newTeacher
       student = newStudent
    }
}

let school : School = School(teacher : "老师" , student : "学生")

school.sayHI()
print(school.teacher! , school.student!)

效果图

Paste_Image.png

</br>
//继承父类


Paste_Image.png

</br>


//继承父类
class Student : Person {
    var number : Int?
//重写父类方法 : 需要添加override修饰
    override func sayHI() {
        print("家教")
}

// 重写父类的init函数
    override init(name newName: String, gender newGender: String, age newAge: Int) {
    super.init(name: newName, gender: newGender, age: newAge)
    }
  //在重新创建一个init方法的时候,还是需要super.init
        init(number newNumer : Int) {
      super.init(name: "卡卡", gender: "男", age: 22)
            number  = newNumer
     
        }
}
let a : Student = Student(name: "闪闪", gender: "男", age: 24)
let b : Student = Student(number: 220)
a.sayHI()
print(b.number! , a.name! , a.age! , a.gender!)

效果图

Paste_Image.png

闭包

myBlock = {
    (a , b)  -> Int in
    return a > b ? a : b
}

var c = myBlock (a: 10, b: 5)
Top