zoukankan      html  css  js  c++  java
  • 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, 20)

    class Video {

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

        var resolution2 = Resolution(height: 20, 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 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, 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, 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 = 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 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,  20)
    
    class Video {
        // 类的一个属性 (此处将一个结构体定义为该类的属性)
        var resolution2 = Resolution(height: 20,  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  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,  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,  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 = 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
  • 相关阅读:
    linux如何查看端口或服务被占用情况
    linux网络查看及配置相关命令
    linux查看程序运行相关命令
    shell脚本编写一个用真实用户去访问的vsftpd服务器
    shell脚本监控CPU和内存利用率
    小白的个人技能树(基于自动化软件测试开发实习和软件开发实习)
    MySQL 8.0.12 基于Windows 安装教程(超级详细)
    C语言 0x7fffffff是多少(也就是INT_MAX,首位是 0,其余都是1,f代表1111)
    数通知识点
    数据结构之算法基础
  • 原文地址:https://www.cnblogs.com/aaalice/p/4249234.html
Copyright © 2011-2022 走看看