swift 变量 属性_swift属性与变量 - CSDN
  • Swift属性(Properties)

    2015-10-30 14:44:52
    属性关联特定的类、结构和枚举的值。存储的属性存储常量和变量的值作为实例的一部分。

    属性关联特定的类、结构和枚举的值。存储的属性存储常量和变量的值作为实例的一部分。

    下面以User类为大家介绍属性,先上全部类代码。

    class DataImporter {
    
        var fileName = "data.txt"
    
        init() {
            print("初始化")
        }
    }
    
    private class Users {
    
        // 有默认值的属性
        var id = 0
        // 只指定类型的属性,有可能存储nil
        var name:String?
        // 懒加载,只是使用的时候才会初始化
        lazy var importer = DataImporter()
        // get、set
        var qqTemp:String = ""
        var qq:String {
            // 如果使用get和set则不能使用当前属性名赋值,以免死循环
            // 获得
            get {
                print("获得")
                return self.qqTemp
            }
            // 设置
            set {
                print("传入值:\(newValue)")
                self.qqTemp = newValue
            }
        }
        // 只读,read-only
        var height: Int {
            return 180
        }
        // 属性观察
        var address:String = "" {
            willSet {
                print("新地址:\(newValue)")
            }
            didSet {
                print("旧地址:\(oldValue)")
            }
        }
    
        // 静态变量
        static var storedTypeProperty = "Some value."
    }

     

    基础属性

    在类和结构体中可以建立存储属性,可以是常量、变量或枚举。也可以为属性设置初始值或不设置初始值。

    private class Users {
        // 有默认值的属性
        var id = 0
        // 只指定类型的属性,有可能存储nil
        var name:String?
    }

    使用:

    let user = Users()
    
    // 有初始值
    print("\(user.id)") // 0
    // 无初始值
    print("\(user.name)") // nil

     

    懒加载属性

    你可以给属性添加初始值,但是有的时候你添加的初始值是一个很大的对象,但你只希望使用它的时候才初始化。这就需要用到懒加载,懒加载属性就是当我们首次使用的时候才会创建并分配存储空间。懒加载的关键字是lazy。

    // 懒加载,只是使用的时候才会初始化
    lazy var importer = DataImporter()
    
    class DataImporter {
    
        var fileName = "data.txt"
    
        init() {
            print("初始化")
        }
    }
    
    print("\(user.importer.fileName)") // 先输出"初始化",后输出"data.txt"

     

    Getter和Setter

    我们都知道点方法的实质是调用get和set方法,在swift中也有get和set方法。

    var qqTemp:String = ""
    var qq:String {
        // 如果使用get和set则不能使用当前属性名赋值,以免死循环
        // 获得
        get {
            print("获得")
            return self.qqTemp
        }
        // 设置
        set {
            print("传入值:\(newValue)")
            self.qqTemp = newValue
        }
    }
    
    user.qq = "937447974" // 传入值:937447974
    print("\(user.qq)")   // 获得 937447974

    如上所示,在属性中我们可以更加精确的控制get和set方法。在set中,newValue就是外部传入的值。

     

    只读属性

    在swift中也支持属性只读,简单点就是只写get方法,不写set方法。但是swift考虑这种情况有更好的方式实现。

    // 只读,read-only
    var height: Int {
        return 180
    }

     

    属性观察

    有的时候,你可能想监听设置属性的操作,同时又想使用当前属性名。因为get和set中是不能使用当前属性名的,鉴于这种情况,swift提供了两种操作符:

    • willSet:设置前调用,newValue代表外部传入值;
    • didSet:设置后调用,didSet代码原始值。
    // 属性观察
    var address:String = "" {
        willSet {
            print("新地址:\(newValue)")
        }
        didSet {
            print("旧地址:\(oldValue)")
        }
    }
    
    //属性观察 willSet将设置,didSet已设置
    user.address = "北京"   // 新地址:北京  旧地址:
    user.address = "天安门" // 新地址:天安门 旧地址:北京
    

     

    静态变量

    在swift中也支持静态变量static,使用静态变量只需要使用类名。

    // 静态变量
    static var storedTypeProperty = "Some value."
    
    // 静态变量
    Users.storedTypeProperty = "static"
    print("\(Users.storedTypeProperty)") // static

     


    其他

    参考资料

    The Swift Programming Language (Swift 2.1)

    文档修改记录

    时间 描述
    2015-10-29 根据 The Swift Programming Language (Swift 2.1)中的Classes and Structures总结

     


    版权所有:http://blog.csdn.net/y550918116j

    展开全文
  • Swift属性定义

    2016-09-16 20:48:18
    Swift中类的属性有多种 存储属性:存储实例的常量和变量 计算属性:通过某种方式计算出来的属性属性:与整个类自身相关的属性一、存储属性存储属性是最简单的属性,它作为类实例的一部分,用于存储常量和变量...

    Swift中类的属性有多种
    存储属性:存储实例的常量和变量
    计算属性:通过某种方式计算出来的属性
    类属性:与整个类自身相关的属性

    一、存储属性

    存储属性是最简单的属性,它作为类实例的一部分,用于存储常量和变量;
    可以给存储属性提供一个默认值,也可以在初始化中个对其进行初始化。
    下面是存储属性的写法:

    //: Playground - noun: a place where people can play
    
    import UIKit
    
    class Student : NSObject {
        // 定义存储属性
        var age : Int = 0
        var name : String?  // “?”符号,表示name为可选类型,初始化值为nil
    }
    
    // 实例化类
    let stu = Student()
    // 给属性赋值
    stu.age = 10
    stu.name = "jack"
    
    // 获取属性值
    print(stu.age)  // 10
    
    // 因为name是可选类型,可以进行解包 stu.name!
    // 但解包是一个危险的操作,所以一般采用可选绑定的方式
    if let name = stu.name {
        print(name)
    }

    二、计算属性

    再定义2个属性:

        // 数学成绩
        var mathScore : Double = 0.0
        // 语文成绩
        var chineseScore : Double = 0.0

    给这个2个属性赋值并计算平均成绩:

    stu.mathScore = 78
    stu.chineseScore = 88.88
    
    // 计算平均成绩
    let avgScore = (stu.mathScore + stu.chineseScore) * 0.5
    print(avgScore)

    那么问题来了:如果这个平均成绩我们在很多地方都要用到,每次都像上面这样写就未免太low了吧?

    1.诶,可以写个方法专门获取平均成绩啊:

        // 定义一个方法,返回平均成绩
        func getAvgScore() -> Double {
            return (mathScore + chineseScore) * 0.5
        }

    调用该方法:

    print(stu.getAvgScore())

    2.难道Swift就没有什么高大上的方式么?

        // 定义计算属性:通过别的方式计算到结果的属性称之为计算属性
        var avgScore : Double {
            return (mathScore + chineseScore) * 0.5
        }

    然后访问这个属性就拿到平均成绩了:

    print(stu.avgScore)

    三、类属性

    定义:

        // 定义类属性
        static var courseCount : Int = 0

    访问:

    //  通过类名访问类属性
    Student.courseCount = 2
    展开全文
  • Swift中的属性可以用可选项(?)和感叹号(!)来标识, 在Swift中的初始化方法中(init中),必须对属性赋初值,但是有以下几种避免的方法。 1、将属性标识为可选项(?),这样,属性有一个默认的nil初始值。 2、将属性...

    Swift中的属性可以用可选项(?)和感叹号(!)来标识,
    在Swift中的初始化方法中(init中),必须对属性赋初值,但是有以下几种避免的方法。

    1、将属性标识为可选项(?),这样,属性有一个默认的nil初始值。
    2、将属性标识为肯定有值,用感叹号(!)标识,需要注意的是,感叹号表示的是必须有值,一旦你使用一个属性是感叹号标识,但是该属性又为空的话,会发生运行时错误。
    3、设置初始值,例如 var name = “jim”,这种,
    3、使用懒加载属性,其实是一个闭包形式的写法,只有用到时才会进行初始化

    要标明返回值,并加lazy修饰
    lazy var name:String = {
           var str = "jim hello"
           return str
        }()
    或者闭包写法
    lazy var name = { () -> String in
            var str = "jim hello"
           return str
        }()
    展开全文
  • 之前在开发是遇到了在OC文件中调用Swift对象的变量调用不到的问题,这里总结一下: 1.首先我们一个Swift项目TestProject。 2.建立一个Swift的文件继承自NSObject名字为SwiftFile.swift,并声明一个字符串变量...

    之前在开发是遇到了在OC文件中调用Swift对象的变量调用不到的问题,这里总结一下:

    1.首先我们一个Swift项目TestProject。

    2.建立一个Swift的文件继承自NSObject名字为SwiftFile.swift,并声明一个字符串变量swiftName。

    import UIKit
    
    class SwiftFile: NSObject {
    
        var swiftName = ""
    }

    3.建立一个OC的文件ObjectFile,并导入“HFSTeacher-Swift.h”(OC想要调用Swift需要导入此文件)如何配置以及导入原因可以自行查询。

    #import "ObjectFile.h"
    #import "HFSTeacher-Swift.h"
    
    @implementation ObjectFile
    
    -(void)oneMethod
    {
        SwiftFile *swiftFile = [[SwiftFile alloc]init];
        NSLog(@"%@",swiftFile.swiftName);
    }
    
    @end

    这个时候会报错,说在SwiftFile中找不到swiftName成员。

    4.这个时候需要在SwiftFile.swift中加入一个声明@objcMembers以表示文件中成员可以被OC调用:

    import UIKit
    
    @objcMembers
    class SwiftFile: NSObject {
    
        var swiftName = ""
    }
    

    5.如此则大功告成!

    展开全文
  • Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值,也就是说变量不会有默认值,所以要求使用变量之前必须要对其初始化。如果在使用变量之前不进行初始化就会报错: var stringValue :...
  • 我们在Java中碰到过这样的问题,在定义一个变量后,没有对它进行赋值,但是可以正常输出,输出的默认值对于int整型变量来说就是0.对于字符串的话就是一个null,并不会出现任何的警告或者错误。但是来到Swift中一切又...
  • Swift 中的属性分为两类:一种是存储属性,把常量或变量的值作为实例的一部分;另一种是计算属性,它计算一个值,类似于方法的功能,提供了一个处理数据的入口与出口。计算属性可以用于类、结构和枚举里,存储属性...
  • 希望对Swift的学习者有所帮助,使用的编写工具:JQNote 常量和变量关联一个名称(比如:maximumNumberOfLoginAttempts 和 welcomeMessage)和一个特殊类型的值(比如:数字10和字符串“Hello”)。一个常量一旦...
  • 变量声明1、普通变量swift 像javascript一样是可以智能推断类型的,他会根据我们变量的值来推断变量的类型 var age = 10 // Int var name ="lily" //编译器会自动推断出String static let name = "MyClass" //...
  • // 《函数变量》 // ViewController.swift // Function_variables /*  * 函数可以存储在变量中。  * 准备条件是:我们首先要声明一个变量,它能够存储一个接受特定参数、返回值的函数。  * 条件是: ...
  • swift 属性值变化

    2019-08-01 23:49:16
    如果创建了一个结构体的实例并将其赋值给一个常量,则无法修改该实例的任何...把一个引用类型的实例赋给一个常量后,仍然可以修改该实例的变量属性 延迟存储属性(懒加载)  延迟存储属性是指当第一次被调用的时...
  • Swift变量的可选(Optional)类型,用于处理值缺失的情况。可选表示"那儿有一个值,并且它等于 x "或者"那儿没有值"。 当你声明一个可选变量或者可选属性的时候没有提供初始值,它的值会默认为nil。 如果一个可选...
  • Swift4.0】属性

    2017-12-28 15:19:36
    存储型属性存储一个实例的常量和变量值部分,然而计算型属性会计算出(而不是存储)一个值。类,结构体和枚举都支持计算型属性,而存储型属性只有类和结构体支持。这两种属性通常跟某个类型的实例关联。然而
  • 是一个概念 Stored Properties and Instance Variables If you have experience with Objective-C, you may know that it provides two ways to store values and references as part of a class instance....
  • Swift的全局变量和局部变量, 类型属性, 获取和设置类型属性的值
  • swift声明属性为某个类型同时遵循某协议 var instanse:(协议A & 类B) 转载于:https://www.cnblogs.com/duzhaoquan/p/11338661.html
  • import UIKit var str = "Hello, playground" ... 1、存储属性: ...就是存储一个常量或变量,懒加载也属于存储型属性。.../*Swift中有储值属性和计算属性,一般我们应该是给计算属性添加get和set
  • 计算属性属性监视器所描述的模式也可以用于全局变量和局部变量,全局变量是在函数、方法、闭包或任何类型之外定义的变量,局部变量是在函数、方法或闭包内部定义的变量。   前面章节提到的全局或局部变量都属于...
  • [swift学习之十四]计算属性和存储属性
  • swift中的计算属性

    2017-03-09 17:19:29
    Computed Properties In addition to stored properties, classes, structures, and enumerations can define computed properties, which do not actually store a value. Instead, they provide a getter and an ...
1 2 3 4 5 ... 20
收藏数 13,869
精华内容 5,547
关键字:

swift 变量 属性