前面我们基本上把Swift的基本内容过了一边,但这并不足以让我们在开发中良好的运用,现在让我们继续来往下学习吧:

1.全局变量和局部变量

在前面我们讲解了计算属性和属性监视器,它们所描述的模式也是可以用于全局变量和局部变量,所谓的全局变量和局部变量其实是和OC中里的一致,没有多大区别,

并且全局或局部变量都属于存储型变量,跟存储属性类似,它提供特定类型的存储空间,并允许读取和写入。

另外,在全局或局部范围都可以定义计算型变量和为存储型变量定义监视器,计算型变量跟计算属性一样,返回一个计算的值而不是存储值,声明格式也完全一样。

PS: 全局的常量或变量都是延迟计算的,跟延迟存储属性相似,不同的地方在于,全局的常量或变量不需要标记 lazy 特性; 局部范围的常量或变量不会延迟计算。

2.类型属性

在我们实际开发中,实例的属性是属于特殊的类型属性,同时也可以为类型本身定义属性,不管类型有多少个实例,这些属性都只有唯一一份,这种属性就是类型属性。

类型属性用于定义特定类型所有实例共享的数据,比如所有实例都能用的一个常量,或者所有实例都能访问的一个变量.

对于值类型(指结构体和枚举)可以定义存储型和计算型类型属性,对于类(class)则只能定义计算型类型属性,值类型的存储型类型属性可以是变量或常量,计算型类型属性跟实例的计算属性一样定义成变量属性.

PS: 跟实例的存储属性不同,必须给存储型类型属性指定默认值,因为类型本身无法在初始化过程中使用构造器给类型属性赋值。

3.类型属性语法

在 C 或 Objective-C 中,静态常量和静态变量的定义是通过特定类型加上 global 关键字,在 Swift 编程语言中,类型属性是作为类型定义的一部分写在类型最外层的花括号内,因此它的作用范围也就在类型支持的范围内.

使用关键字 static 来定义值类型的类型属性,关键字 class 来为类(class)定义类型属性,比如:

struct SomeStructure {
    static var storedTypeProperty = "Some value."
    static var computedTypeProperty: Int {
        return 1
    }
}

enum SomeEnumeration {
    static var storedTypeProperty = "Some value."
    static var computedTypeProperty: Int {
        return 2
    }
}

class SomeClass {
    class var computedTypeProperty: Int {
        return 3
    }
}

PS: 例子中的计算型类型属性是只读的,但也可以定义可读可写的计算型类型属性,跟实例计算属性的语法类似.

4.获取和设置类型属性的值

在上面的例子,我们是定义好了属性,如果我们要取里面的属性,是和我们在实例的时候一致的,比如:

println(SomeClass.computedTypeProperty)
// 打印出来的结果: 3

println(SomeStructure.storedTypeProperty)
// 打印出来的结果: Some value.

SomeStructure.storedTypeProperty = "Another value."
println(SomeStructure.storedTypeProperty)
// 打印出来的结果: Another value.

这样子我们就可以访问类型中的属性了,还有另外一个例子,让我们来看看:

struct AudioChannel {
    static let thresholdLevel = 10
    static var maxInputLevelForAllChannels = 0

    var currentLevel: Int = 0 {
    didSet {
        if currentLevel > AudioChannel.thresholdLevel {
            // 将新电平值设置为阀值
            currentLevel = AudioChannel.thresholdLevel
        }
        if currentLevel > AudioChannel.maxInputLevelForAllChannels {
            // 存储当前电平值作为新的最大输入电平
            AudioChannel.maxInputLevelForAllChannels = currentLevel
        }
    }
    }
}

var leftChannel = AudioChannel()
var rightChannel = AudioChannel()

leftChannel.currentLevel = 7

println(leftChannel.currentLevel)
// 打印出来的结果: 7
println(AudioChannel.maxInputLevelForAllChannels)
// 打印出来的结果: 7

rightChannel.currentLevel = 11

println(rightChannel.currentLevel)
// 打印出来的结果: 10
println(AudioChannel.maxInputLevelForAllChannels)
// 打印出来的结果: 10

PS: 由于上面做了个限制,该电频最高就只能到达10,所以一旦你输入大于10的数,这里都会默认输出10.

好了,这次我们就讲到这里,下次我们继续~

Swift基础语法: 27 - Swift的全局变量和局部变量, 类型属性, 获取和设置类型属性的值的更多相关文章

  1. Swift基础语法: 27 - Swift的全局变量和局部变量, 类型属性, 获取和设置类型属性的值

    类型属性用于定义特定类型所有实例共享的数据,比如所有实例都能用的一个常量,或者所有实例都能访问的一个变量.对于值类型可以定义存储型和计算型类型属性,对于类则只能定义计算型类型属性,值类型的存储型类型属性可以是变量或常量,计算型类型属性跟实例的计算属性一样定义成变量属性.PS:跟实例的存储属性不同,必须给存储型类型属性指定默认值,因为类型本身无法在初始化过程中使用构造器给类型属性赋值。

  2. [翻译]Swift编程语言——函数

    Swift的标准化函数语法足够用来表述无论是C风格的无参函数,还是复杂的OC风格的具有本地和外部参数的方法。每个Swift的函数都有类型,类型包括了函数的参数类型和返回值类型。为了让这个函数看起来更简洁,可以将讯息创建和返回语句组合在一行实现:函数的参数和返回值Swift的函数参数以及返回值是非常灵活的。写那个名字一次,在它的前面加上井号就可以,这个告诉Swift这个参数的局部名称和外部名称相同。

  3. Swift学习:2.6 函数

    Swift统一的函数语法足够灵活,可以用来表示任何函数,包括从最简单的没有参数名字的C风格函数,到复杂的带局部和外部参数名的Objective-C风格函数。在Swift中,每个函数都有一种类型,包括函数的参数值类型和返回值类型。下面这个函数就是一个无参函数,当被调用时,它返回固定的String消息:尽管这个函数没有参数,但是定义中在函数名后还是需要一对圆括号。第二个函数printWithoutCounting调用了第一个函数,但是忽略了它的返回值。

  4. 关于全局变量和局部变量的那些事

    关于全局变量和局部变量的那些事,有哪些事呢?不要走开,接下来将详细介绍,感兴趣的朋友可以了解下哦

  5. JavaScript把局部变量变成全局变量的方法

    这篇文章主要介绍了JavaScript把局部变量变成全局变量的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  6. phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别

    这篇文章主要介绍了phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别,需要的朋友可以参考下

  7. PHP变量作用域(全局变量&局部变量)&global&static关键字用法实例分析

    这篇文章主要介绍了PHP变量作用域(全局变量&局部变量)&global&static关键字用法,结合实例形式分析了PHP全局变量与局部变量的作用域,以及global、static关键字功能与使用技巧,需要的朋友可以参考下

  8. Angular 2父子组件数据传递之局部变量获取子组件其他成员

    这篇文章主要给大家介绍了关于Angular 2父子组件之间数据传递之局部变量获取子组件其他成员的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。

  9. php – 全局变量与局部变量

    好吧,我不确定我是否正确理解这个概念.如果我理解正确:全局变量可以在同一文档中的任何位置引用,也可以在与“include”链接的文档中引用.局部变量只能在它们所在的函数中引用.好的,如果我理解正确是否真的需要局部变量?但是,使用数据库会更简单,我想.我想在什么情况下使用局部变量?

  10. PHP性能:$this->变量与局部$变量(操作)

    当您访问类中的某些内容时,PHP解释器首先必须在内存中查找该类,然后查看该属性的位置.在一个普通的局部变量上,它不需要搜索类中的属性,它可以直接访问变量的内存,因此它更快一些.

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部