首页 > 代码库 > Swift 学习 --- 基础<二>

Swift 学习 --- 基础<二>

// Playground - noun: a place where people can play

 

import UIKit

 

var str = "Hello, playground"

//------------------------- 类和结构体的相同与不同 -------------------------

//*************************

// 结构体和类的相同点, 在swift中,struct被强化

// 1. 都可以定义属性

// 2. 定义方法

// 3. 定义init (构造器)

// 4. 可以延展

// 5. 可以遵守协议

 

//*************************

// 不同点

// 1.结构体是值类型,类是引用类型

// 2.类是可以被继承的

// 3.类可以使用类型推断 isKindOfClass --- is

// 4.类可以使用deinit(析构器)

// 5.一个类可以有多个引用

 

//------------------------- 结构体 -------------------------

 

struct Resolution {

    

    // 定义属性

    var height = 0

    var width = 0

}

 

// 输入完名称后,打半括号,就会有提示(结构体)

var resolution = Resolution(height: 20, width: 20)

 

class Video {

    // 类的一个属性 (此处将一个结构体定义为该类的属性)

    var resolution2 = Resolution(height: 20, width: 20)

    var frameRate = 0.1

}

 

 

// 引用类型和值类型的区别

// 在类中,定义一个指针指向之前的实例,是指向同一块内存, 对原值进行修改

// 但是在结构体中,是开辟了一块新的空间,这样做,不会对原值造成任何影响

 

var newResolution = resolution

newResolution.height = 100

resolution

newResolution

 

// 类 指针指向原值,是同一块内存,所以,原值被修改

var video = Video()

video.frameRate = 0.2

var video1 = video

video1.frameRate = 0.5

video.frameRate

 

struct ResolutionA {

    var height: Int

    var width: Int

    

    // 构造器

    init (Height: Int, Width: Int) {

        

        // 自动生成 self.

        self.height = Height

        self.width = Width

    }

}

 

class VideoA {

    var resolutionA = ResolutionA(Height: 100, Width: 100)

    var frameRateA : Double

    

    // 构造器

    init(frameRate : Double){

        self.frameRateA = frameRate

    }

}

 

// 构造器,结构体会自动生成构造器方法,类不会

var videoA = VideoA(frameRate: 0.2)

videoA.resolutionA.height = 120

videoA.resolutionA.height

 

/**

*  属性 : 属性分为两种, 计算属性 / 存储属性

*/

 

// 存储属性是在类和结构体重

// 存储属性是存储在类和结构体重的常量或者变量 计算熟悉纪念馆,就是本身不会进行存储, 它是提供setter 和 getter 方法,简洁设置属性的值

 

struct Point {

    var x = 0

    var y = 0

}

 

struct Size {

    var height = 20

    var width = 20

}

 

struct Rect {

    // point 和 size 是存储属性

    var point = Point(x: 0, y: 0)

    var size = Size(height: 20, width: 20)

    

    // 计算属性, 通过point size 的值来计算center

    var center: Point {

        get {

            // 计算属性的get方法

            let centerX = point.x + size.width/2

            let centerY = point.y + size.height/2

            return Point(x: centerX, y: centerY)

        }

        

        set {

            // 默认newValue, 如果我们不给他名字, 就会叫 newValue

            let x = newValue.x - size.width/2

            let y = newValue.y - size.height/2

            point.x = x

            point.y = y

        

        }

    }

    

    

    // 写一个方法 在常规方法中,是不能实现体内部改变本身属性的值的,需要在方法前加"mutating"

    mutating func hello () {

        println("hello")

        self.point = Point(x: 100, y: 100)

    }

    

    // 静态方法 类似类方法

    static func hello2() {

        println("hello2")

    }

}

 

var rect = Rect()

rect.center

rect.point

 

rect.center = Point(x: 20, y: 20)

rect.center

rect.point

 

rect.size = Size(height: 40, width: 40)

rect.center

rect.point

 

// 调用结构体方法

rect.hello()

// 静态方法调用

Rect.hello2()

 

 

// -------------------------------- 枚 举 ----------------------------------

 

enum PersonIndentity: String {

    case Teacher = "Teacher"

    case Student = "Student"

}

 

// ------------------------------- 类 ----------------------------------

 

class Person {

    var indentify: PersonIndentity?

    let someValue: Int

    var name: String

    var sex: String

    

    // 类的构造器

    init(someValue: Int, name: String, sex: String, idd: PersonIndentity){

        

        self.someValue = http://www.mamicode.com/someValue

        self.sex = sex

        self.name = name

        self.indentify = idd

        

    }

    

    deinit {

        

    }

    

    func hello(){

        println("hello")

        self.name = "world"

    }

    

    // 类方法, 类比于 + 方法 加"class"关键字

    class func hello2(){

        println("hello2")

    }

    

    // 类型属性 只能是计算属性 如果只有getter方法, 那么他就是只读的

    class var home: String {

        

        get{

            return "地球"

        }

        

    }

}

 

// 枚举赋值 PersonIndentity.Student PersonIndentity 可以省略 (因为具备类型推断功能) 写成

// .Student

var student = Person(someValue: 20, name: "Ammy", sex: "f", idd: PersonIndentity.Student)

 

student.hello()

Person.hello2()

 

// 类型属性页只能用类调用

Person.home

student.indentify?.hashValue

student.indentify?.rawValue

 

 

 

 

 

 

 

 

 

import UIKitvar str = "Hello, playground"//------------------------- 类和结构体的相同与不同 -------------------------//*************************// 结构体和类的相同点, 在swift中,struct被强化// 1. 都可以定义属性// 2. 定义方法// 3. 定义init (构造器)// 4. 可以延展// 5. 可以遵守协议//*************************// 不同点// 1.结构体是值类型,类是引用类型// 2.类是可以被继承的// 3.类可以使用类型推断 isKindOfClass --- is// 4.类可以使用deinit(析构器)// 5.一个类可以有多个引用//------------------------- 结构体 -------------------------struct Resolution {        // 定义属性    var height = 0    var width = 0}// 输入完名称后,打半括号,就会有提示(结构体)var resolution = Resolution(height: 20, width: 20)class Video {    // 类的一个属性 (此处将一个结构体定义为该类的属性)    var resolution2 = Resolution(height: 20, width: 20)    var frameRate = 0.1}// 引用类型和值类型的区别// 在类中,定义一个指针指向之前的实例,是指向同一块内存, 对原值进行修改// 但是在结构体中,是开辟了一块新的空间,这样做,不会对原值造成任何影响var newResolution = resolutionnewResolution.height = 100resolutionnewResolution// 类 指针指向原值,是同一块内存,所以,原值被修改var video = Video()video.frameRate = 0.2var video1 = videovideo1.frameRate = 0.5video.frameRatestruct ResolutionA {    var height: Int    var width: Int        // 构造器    init (Height: Int, Width: Int) {                // 自动生成 self.        self.height = Height        self.width = Width    }}class VideoA {    var resolutionA = ResolutionA(Height: 100, Width: 100)    var frameRateA : Double        // 构造器    init(frameRate : Double){        self.frameRateA = frameRate    }}// 构造器,结构体会自动生成构造器方法,类不会var videoA = VideoA(frameRate: 0.2)videoA.resolutionA.height = 120videoA.resolutionA.height/***  属性 : 属性分为两种, 计算属性 / 存储属性*/// 存储属性是在类和结构体重// 存储属性是存储在类和结构体重的常量或者变量 计算熟悉纪念馆,就是本身不会进行存储, 它是提供setter 和 getter 方法,简洁设置属性的值struct Point {    var x = 0    var y = 0}struct Size {    var height = 20    var width = 20}struct Rect {    // point 和 size 是存储属性    var point = Point(x: 0, y: 0)    var size = Size(height: 20, width: 20)        // 计算属性, 通过point size 的值来计算center    var center: Point {        get {            // 计算属性的get方法            let centerX = point.x + size.width/2            let centerY = point.y + size.height/2            return Point(x: centerX, y: centerY)        }                set {            // 默认newValue, 如果我们不给他名字, 就会叫 newValue            let x = newValue.x - size.width/2            let y = newValue.y - size.height/2            point.x = x            point.y = y                }    }            // 写一个方法 在常规方法中,是不能实现体内部改变本身属性的值的,需要在方法前加"mutating"    mutating func hello () {        println("hello")        self.point = Point(x: 100, y: 100)    }        // 静态方法 类似类方法    static func hello2() {        println("hello2")    }}var rect = Rect()rect.centerrect.pointrect.center = Point(x: 20, y: 20)rect.centerrect.pointrect.size = Size(height: 40, width: 40)rect.centerrect.point// 调用结构体方法rect.hello()// 静态方法调用Rect.hello2()// -------------------------------- 枚 举 ----------------------------------enum PersonIndentity: String {    case Teacher = "Teacher"    case Student = "Student"}// ------------------------------- 类 ----------------------------------class Person {    var indentify: PersonIndentity?    let someValue: Int    var name: String    var sex: String        // 类的构造器    init(someValue: Int, name: String, sex: String, idd: PersonIndentity){                self.someValue = someValue        self.sex = sex        self.name = name        self.indentify = idd            }        deinit {            }        func hello(){        println("hello")        self.name = "world"    }        // 类方法, 类比于 + 方法 加"class"关键字    class func hello2(){        println("hello2")    }        // 类型属性 只能是计算属性 如果只有getter方法, 那么他就是只读的    class var home: String {                get{            return "地球"        }            }}// 枚举赋值 PersonIndentity.Student PersonIndentity 可以省略 (因为具备类型推断功能) 写成// .Studentvar student = Person(someValue: 20, name: "Ammy", sex: "f", idd: PersonIndentity.Student)student.hello()Person.hello2()// 类型属性页只能用类调用Person.homestudent.indentify?.hashValuestudent.indentify?.rawValue

 

Swift 学习 --- 基础<二>