Swift实战入门笔记 -- 大学霸78两章

熟悉Swift 如何用Cocoa Cocoa Touch完成工作很重要 

我们可以将软件看作模块化工具的集合,而不是单个大型实体。

SpriteKit,它是iOSOS X都可以使用的一种框架,用于制作快速、高效的2D游戏和图形。
SceneKit,它是iOSOS X都可以使用的一种框架,用于制作快速、高效的3D场景和图形 
Instruments,它是用于Mac iOS 应用程序的探查器和分析工具 
page20image432.png表示提示或建议
page20image6016.png表示一般注记
page20image6504.png表示警告或警示
函数:

#会告诉编译器该名称为本地参数名和外部参数名

func函数名(#本地参数名:数据类型) {。。。。。}

设定参数默认值

定义函数时,为参数设定默认值

使用可变参数,可以使一个参数接受零个或多个指定类型的值。设定一个可变参数需要 在参数类型名后添加“...”。 

求平均值:

import Foundation
func average(numbers: Double...){ 

var total: Double = 0
for number in numbers { 

total += number } 

println(total/Double(numbers.count)) } 

average(1, 2, 3, 4, 5) average(3, 8, 19) 

3.0

10.0

注意:可变参数只有一个,可变参数必须放在最后,作为最后一个参数

使用变量参数实现字符串右对齐


import Foundation

funk aligeRight(var string:String,count :Int,pad:Character) {

let amountToPad = count -countElements(string)

//遍历

for _in 1…amountToPad {

string = pad +string 

  }

println(string)

}
let originalStrinf1 = “swift”

alignRight(originalString1,10,”*”)

let originalString2 = “Hi”

alignRight(originalString2, 10, "*") 

let originalString3 = "" alignRight(originalString3, 10, "*") 

运行结果:

*****swift
********Hi
**********

注意:变量参数只能存在于函数调用的生命周期中


用一个函数修改参数的值,并且让这些变化在函数调整后让然有效,

参数名前加inout关键字来实现—>定义输入-输出参数

func 函数名(inout 参数名:数据类型,……){…}

如果参数是输入输出参数,调用时必须在参数前加一个“&”符号

return的表达式类型和函数的返回类型一致

返回多个返回值时使用元组类型

使用函数类型作为参数类型或者返回值类型

Swift提供了 74 个标准函数 

绝对值函数abs(数值)   返回值为o或者正数

最大值函数 max(参数 1,参数2,参数3,...)参数可以是数值,字符串,字符

最小值min() 

函数 map(序列,闭包表达式),它的功能是返回一个新的序列。 


序列的最大值函数maxElement()/最小值函数 minElement() 

maxElement()函数获取一个序列中最大值的元素。maxElement(序列数值或者一个范围

minElement()函数可以获取一个序列中最小值的元素minElement(序列)数值或者一个范

contains(序列,元素)       判断序列是否包含指定元素函数 返回值为布尔类型

true包含,false不包含  比较时会区别字母的大小写

#import Foundation

var languages = ["Swift", "Objective-C","C"] //判断在languages 数组中是否包含"Swift"字符串if contains(languages, "Swift") == true

println("languages序列中包含元素“Swift") }else{ 

println("languages序列中不包含元素“Swift") } 

//判断在languages 数组中是否包含"Java"字符串if contains(languages, "Java") == true

println("languages序列中包含元素“Java") }else{ 

println("languages 序列中不包含元素“Java") } 


序列排序函数sort(序列序列是指数组

var languages = ["Swift", "Objective-C","C"] 

println("排序前:languages=\(languages)")
let sortlanguages:()=sort(&languages) 

println("排序后:languages=\(sortlanguages)") 

var value = [8, 1,5,7,0]

 println("排序前:value=\(value)")
let sortvalue:()=sort(&value)

 println("排序后:value=\(sortvalue)") 

排序前:languages=[Swift, Objective-C, C] 

排序后:languages=[C, Objective-C, Swift] 

排序前:value=[8, 1, 5, 7, 0] 

排序后:value=[0, 1, 5, 7, 8] 

Program ended with exit code: 0 

序列倒序函数reverse(序列)序列是数组

import Foundation
var languages = ["Swift", "Objective-C","C"]

 println("languages=\(languages)") 

println("倒序输出:")
for i in reverse(languages){ 

println(i) } 

var value = [1,8,4,10] println("value=\(value)")

 println("倒序输出:")for i in reverse(value){ 

println(i) } 


运行结果如下: 

languages=[Swift, Objective-C, C] 

倒序输出: 

C
Objective-C Swift
value=[1, 8, 4, 10] 倒序输出: 

10
4
8
1

闭包是自包含的函数代码块,可以在代码中被传递和使用 ,CObjective-C中的代码块(blocks)以及其他一些编程语言中的Lambda 函数比较相似 

{(参数列表) ->返回值类型 in

语句

}

参数可以是常量,变量,输入-输出参数,但没有默认值或最后使用可变参数,元组可作为参数和返回值

关键字in便是闭包的参数和返回值类型定义已经完成,闭包函数体即将开始

闭包表达式最长用在其他的函数中,并不是单独的去使用它。 

Trailing闭包 :将一个很长的闭包表达式作为最后一个参数传递给函数,可以使用 



pointer指针


类的构成:

属性:它将值和特定的类关联。
下标脚本:访问对象、集合等的快捷方式。 

方法:实现某一特定的功能,类似于函数。 

class类名{//具体内容}

实例化对象也可以称为类的实例

类名可以使用“大骆驼拼写法”SomeClass

属性、对象以及方法使用“小骆驼拼写法”


实例化对象(类的实例)

var/let 对象名=类名()

swift中属性可以将值跟特定的类。结构或者枚举关联。

分为存储属性,计算属性和类型属性

存储属性就是存储特定类中的一个常量或变量,根据数据是否可变,分为常量存储属性和变量存储属性

let 常量存储属性名:数据类型 = 初始值

var 变量存储属性名:数据类型 = 初始值

初始化:::——>>>initializers

对存储属性的访问用.

对象名.常量存储属性名/变量存储属性名

修改存储属性:

对象名.变量存储属性 = 修改的内容

如果开发者只有在第一次调用存储属性时才能确定初始值,这时需要使用延迟存储属性 实现。关键字:lazy

lazy var  属性名:数据类型 = 初始内容

计算属性不存储值,而是提供了一个 getter setter来分别进行获取值和设置其他属性的值。 

getter使用 get 关键字进行定义,其一般形 式如下: 

get{

return 某一属性值

}

setter使用 set 关键字进行定义,其一般语法形式如下: 

set(参数名称){

属性值= 某一属性值

}

—————————————包含set和get

var 属性名:数据类型{

get{

return 某一属性值

}

set(参数名称){

某一属性值

。。。

}

}


在计算属性中,如果只有一个 getter,则称为只读计算属性。只读计算属性可以返回一 个值,但不能设置新的值。 

类型属性就是不需要对类进行实例化就可以使用的属性。它需要使用关键字 class 进行 定义 

class var 类型属性名:数据类型{

返回一个值

}

访问属性的方式:类名.类型属性

修改:

类名.属性类型 = 修改的内容

属性监视器用来监控和响应属性值的变化。每次属性被设置值的时候,都会调用属性监 视器,哪怕是新的值和原先的值相同。一个属性监视器由willSet didSet 组成, 其中,willSet在设置新的值之前被调用,它会将新的属性值作为固定参数传入。didSet在新的值被设置之后被调用,会将旧的属性值作为参数传入,可以为该参数命名或者使用默 认参数名 oldValue。 默认的参数可以是不可以交换使用的 ,在延迟属性中不可以使用属性监视器 ,willSet didSet 也可以单独使用。 

var属性名:数据类型 =初始化

willSet(参数名){

}

didSet(参数名) {

…}


Swift 会使用默认 newValue 表示新值 

方法是定义在类中的函数。分为实例方法被定义在类中,但是由类的实例调用。此类方法叫实例方法

func 方法名()-> 返回值类型{…}

调用:对象名.方法名()


类型方法:定义类自己定义类自身调用的方法,

实例方法被类的某个实例调用的方法。

class 类名{

class fun c方法名{ 参数1:数据类型,参数2:数据类型,…){

…}}

调用:类名.方法名(参数1,参数2.,,,)

变量名称     定义范围

存储属性     定义在类中

局部变量     函数、方法或闭包内部

全局变量     函数、方法、闭包或任何类型之外定义的变量


局部变量和存储属性同名的解决方法——self属性 

下标脚本通过 subscript 关键字进行定义, 

subscript(数名称1:数据类型,参数名称2:数据类型,...) ->返回值的数据类型 { get { 

//返回与参数类型匹配的类型的值

set(参数名称) {
// 执行赋值操作 

} } 

可选链接可以判断请求 或调用的目标(属性、方法、下标脚本等)是否为空 如果目标有值,那么调用就会成功; 相反,则返回空(nil)。对于多次请求或调用的可以被链接在一起形成一个链条。Swift中 的可选链接和 Objective-C中的消息为空类似,但是 Swift 可以使用在任意的类型中使用, 并且失败与否可以被检测到。 

用?来标示


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值