从0开始学Swift笔记整理(一)

Swift 是一种适用于 iOS 和 OS X 应用的全新编程语言,它建立在最好的 C 和 Objective-C 语言之上,并且没有 C 语言的兼容性限制。Swift 采用安全的编程模式,增加了现代功能使 编程更容易、更灵活、更有趣。Swift 以成熟且备受宠爱的 Cocoa 和 Cocoa Touch 框架为 支撑,这是一个重新构想软件开发的机会。

——我的第一行Swift代码

import Foundation             //表示引入Foundation框架

var str = "Hello World"    //声明str变量,var表示声明变量

print(str)      //print(_:)是一个函数,能够将变量或常量输出到控制台

——使用Web网站编写Swift代码

Swift程序不能在Windows其他平台编译和运行,有人提供了一个网站swiftstub.com,可以在任何平台下编译和运行Swift程序。

——Swift 2.0之后增加的关键字

在Swift 2.0之后增加defer、guard、repeat、catch、rethrows、throw、throws和try关键字,其中repeat关键字替代do - while循环中的do,即中repeat - while循环。而do关键字用于错误处理。catch、rethrows、throw、throws和try是错误处理关键字。     错误处理是Swift 2.0之后增加新内容。

——用Playground工具编写Swift

用Playground编写Swift代码目的是为了学习、测试算法、验证想法和可视化看到运行结果,不是为了使最终的程序编译和发布。

Playground程序运行 ①区域是代码编写视图;②区域是运行结果视图;③区域是时间轴视图;④区域是控制台视图,使用print等日志函数将结果输出到控制台,可以通过左下角的 按钮隐藏和显示控制台。

——Swift标识符和关键字

标识符就是给变量、常量、方法、函数、枚举、结构体、类、协议等由开发人员指定的名字。

Swift中命名规则:

·区分大小写,Myname与myname是两个不同的标识符;

·标识符首字符可以以下划线(_)或者字母开始,但不能是数字;

·标识符中其他字符可以是下划线(_)、字母或数字。

Swift语言常见的关键字有以下4种

·与声明有关的关键字:class、deinit、enum等。

·与语句有关的关键字:break、case、continue等。

·表达式和类型关键字:as、catch、dynamicType、false等。

·在特定上下文中使用的关键字:associativity、convenience、dynamic等。

注意:Swift中关键字是区分大小写的,所以class和Class是不同的,那么Class不是Swift的关键字。

——常量和变量

在Swift中,用let声明一个常量;用var来声明一个变量

我觉得:原则上优先使用let,它有很多好处,可以防止程序运行过程中不必要的修改、提高程序的可读性。特别是引用数据类型声明时候经常采用let声明,虽然在业务层面上并不是一个常量,而是防止程序运行过程中错误地修改它引用。

——Swift 2.0中的print函数4种重载形式

print(_:)。输出变量或常量到控制台,并且换行。

print(_:_:)。输出变量或常量到指定类型的流中,并且换行。

print(_:appendNewline:)。输出变量或常量到控制台,appendNewline参数是布尔值,true表示换行,false表示不换行。

print(_:_:appendNewline:)
。输出变量或常量指定类型的流中,appendNewline参数是布尔值,true表示换行,false表示不换行。

——在Swift中,表达式有3种形式

1、不指定数据类型    var
a1 = 10

2、指定数据类型      var
a1:Int  = 10

3、使用分号          var
a1:Int = 10; var a2:Int = 20

在Swift语言中,一条语句结束后可以不加分号也可以添加分号,但是有一种情况必须要用分号,那就是多条语句写在一行的时候,需要通过分号来区别语句。

例如:  var a1:Int = 10; var a2:Int =
20;

——Swift的运算符

在Swift语言中主要的运算符包括算术、关系、逻辑、位运算符等

一元运算符:

-    取反符号 取反运算

++    自加一 先取值再加一,或先加一再取值

--    自减一 先取值再减一,或先减一再取值

二元运算符:

+   加  求和,还可用String类型,进行字符串连接操作

-   减  求差

*   乘  求积

/   除  求商

%     取余 求余数

几个特殊运算符:

?  引用号(.):实例调用属性、方法等操作符。

?  问号(?):用来声明可选类型。

?  感叹号(!):对可选类型值进行强制拆封。

?  箭头(->):说明函数或方法返回值类型。

?  冒号运算符(:):用于字典集合分割“键值”对。

——Swift中数据类型

整型、浮点型、布尔型、字符、字符串这些类型是一定有的,其中集合、枚举、结构体、类也是Swift中的数据类型。元组是Swift中特有的。

元组是一种数据结构,在数学中应用广泛。在计算机科学中,元组是关系数据库中的基本概念,元组表中的一条记录,每列就是一个字段。因此在二维表里,元组也称为记录。

现在使用Swift语法表示Student元组就是:

第一种写法

("1001", "张三", 30, 90)

第二种写法

(id:"1001", name:"张三", english_score:30, chinese_score:90)

——数据类型之整型和浮点型

Swift提供8、16、32、64位形式的有符号及无符号整数。这些整数类型遵循C语言的命名规约,我归纳了Swift中的整型:

整型示例:

print("UInt8 range: \(UInt8.min) ~ \(UInt8.max)")

print("Int8 range: \(Int8.min) ~ \(Int8.max)")

print("UInt range: \(UInt.min) ~ \(UInt.max)")

print("UInt64 range: \(UInt64.min) ~ \(UInt64.max)")

print("Int64 range: \(Int64.min) ~ \(Int64.max)")

print("Int range: \(Int.min) ~ \(Int.max)")

输出结果如下:

UInt8 range: 0 ~ 255

Int8 range: -128 ~ 127

UInt range: 0 ~ 18446744073709551615

UInt64 range: 0 ~ 18446744073709551615

Int64 range: -9223372036854775808 ~ 9223372036854775807

Int range: -9223372036854775808 ~ 9223372036854775807

上述代码是通过整数的min和max属性计算各个类型的范围。

浮点型主要用来储存小数数值,也可以用来储存范围较大的整数。它分为浮点数(float)和双精度浮点数(double)两种,双精度浮点数所使用的内存空间比浮点数多,可表示的数值范围与精确度也比较大。

——字符串的插入、删除和替换

splice(_:atIndex:)。在索引位置插入字符串。

insert(_:atIndex:)。在索引位置插入字符。

removeAtIndex(_:)。在索引位置删除字符。

removeRange(_:)。删除指定范围内的字符串。

replaceRange(_:, with: String) 。使用字符串或字符替换指定范围内的字符串。

代码:

var str = "Swift"

print("原始字符串:\(str)")

str.splice("Objective-C and ".characters, atIndex:
str.startIndex)

print("插入字符串后:\(str)")

str.insert(".", atIndex: str.endIndex)

print("插入.字符后:\(str)")

str.removeAtIndex(str.endIndex.predecessor())

print("删除.字符后:\(str)")

var startIndex = str.startIndex

var endIndex = advance(startIndex, 9)

var range = startIndex...endIndex

str.removeRange(range)

print("删除范围后:\(str)")

startIndex = str.startIndex

endIndex = advance(startIndex, 0)

range = startIndex...endIndex

str.replaceRange(range, with: "C++")

print("替换范围后:\(str)")

输出结果:

原始字符串:Swift

插入字符串后:Objective-C and Swift

插入.字符后:Objective-C and Swift.

删除.字符后:Objective-C and Swift

删除范围后:C and Swift

替换范围后:C++ and Swift

——请注意数字类型之间的转换

在C、Objective-C和Java等其他语言中,整型之间有两种转换方法:

1、 从小范围数到大范围数转换是自动的;

2、 从大范围数到小范围数需要强制类型转换,有可能造成数据精度的丢失。

而在Swift中这两种方法是行不通的,需要通过一些函数进行显式地转换,代码如下:

let historyScore:UInt8 = 90

let englishScore:UInt16 = 130

let totalScore = historyScore + englishScore  //错误

程序就会有编译错误,原因是historyScore是UInt8类型,而englishScore是UInt16类型,它们之间不能转换。

两种转换方法:

· 一种是把UInt8的historyScore转换为UInt16类型。由于是从小范围数转换为大范围数,这种转换是安全的。

代码: let totalScore = UInt16(historyScore) + englishScore  //是正确的转换方法。

·另外一种是把UInt16的englishScore转换为UInt8类型。由于是从大范围数转换为小范围数,这种转换是不安全的,如果转换的数比较大可能会造成精度的丢失。

代码:let totalScore = historyScore + UInt8(englishScore)  //是正确的转换方法。

整型与浮点型之间的转换与整型之间的转换类似:

let historyScore:Float = 90.6

let englishScore:UInt16 = 130

let totalScore = historyScore + englishScore  //错误

let totalScore = historyScore + Float(englishScore)  //正确,安全

let totalScore = UInt16(historyScore) + englishScore  //正确,小数被截掉

——字典集合

Swift字典表示一种非常复杂的集合,允许按照某个键来访问元素。字典是由两部分集合构成的,一个是键(key)集合,一个是值(value)集合。键集合是不能有重复元素的,而值集合是可以重复的,键和值是成对出现的。

字典声明与初始化

Swift字典类型是Dictionary,也是一个泛型集合。

在声明一个Dictionary类型的时候可以使用下面的语句之一。

var studentDictionary1: Dictionary<Int, String>
var studentDictionary2: [Int: String]

声明的字典需要进行初始化才能使用,字典类型往往是在声明的同时进行初始化的。

var studentDictionary1: Dictionary<Int, String> 
= [102 : "张三",105 : "李四", 109 : "王五"]
var studentDictionary2 = [102 : "张三",105 : "李四", 109 : "王五"]
let studentDictionary3 = [102 : "张三",105 : "李四", 109 : "王五"]

字典遍历

字典遍历过程可以只遍历值的集合,也可以只遍历键的集合,也可以同时遍历。这些遍历过程都是通过for-in循环实现的。

var studentDictionary = [102 : "张三",105 : "李四", 109 : "王五"]
print("---遍历键---")
for studentID in studentDictionary.keys { 
    print("学号:\(studentID)")
}
print("---遍历值---")
for studentName in studentDictionary.values {
   print("学生:\(studentName)")
}
print("---遍历键:值---")
for (studentID, studentName) in studentDictionary {
   print ("\(studentID) : \(studentName)")
}

运行结果如下:

---遍历键---

学号:105

学号:102

学号:109

---遍历值---

学生:李四

学生:张三

学生:王五

---遍历键:值---

105 : 李四

102 : 张三

109 : 王五

——Swift中数组集合

数组(Array)是一串有序的由相同类型元素构成的集合。数组中的集合元素是有序的,可以重复出现。

声明一个Array类型的时候可以使用下面的语句之一。

var studentList1: Array<String>

var studentList2: [String]

声明的Array还不能用,还需要进行初始化,Array类型往往在声明的同时进行初始化。示例代码如下:

var studentList1: Array<String> = ["张三","李四","王五","赵六"]

var studentList2: [String]  = ["张三","李四","王五","赵六"]

let studentList3: [String]  = ["张三","李四","王五","赵六"]

var studentList4 = [String]()

数组遍历

数组最常用的操作是遍历,就是将数组中的每一个元素取出来,进行操作或计算。整个遍历过程与循环分不开,可以使用for-in循环。

var studentList: [String]  = ["张三","李四","王五"]

for item in studentList {

print (item)

}

for (index, value) in studentList.enumerate() {

print("Item \(index + 1 ) : \(value)")

}

运行结果如下:

张三

李四

王五

Item 1 : 张三

Item 2 : 李四

Item 3 : 王五

——函数参数传递

函数的语法格式如下:

func函数名(参数列表)
->返回值类型{

语句组

return返回值

}

函数:关键字是func。

多个参数列表之间可以用逗号(,)分隔,也可以没有参数。

使用箭头“->”指示返回值类型。返回值有单个值和多个值。如果函数没有返回值,则“->返回值类型”部分可以省略。

如果函数有返回值,就需要在函数体最后使用return语句;如果没有返回值,则函数体中可以省略return语句。

函数定义示例代码如下:

func rectangleArea(width:Double, height:Double) -> Double {

let area = width * height

return area

}

print("320x480的长方形的面积:\(rectangleArea(320,
height:480))")

下面介绍几种不同形式的传递参数。

1.使用外部参数名

为每个参数提供一个可以在函数外部使用的名称,称为外部参数名,修改rectangleArea函数的定义如下:

func rectangleArea(W width:Double, H height:Double) -> Double {

let area = width * height

return area

}

在局部参数名之前给一个“外部参数名”,用空格分隔。定义代码中的W和H就是外部参数名。调用代码如下:

print("320x480的长方形的面积:\(rectangleArea(W:320,
H:480))")

如果我们提供了外部参数名,那么在函数调用时,必须使用外部参数名,所以W和H不能省略。

2.省略外部参数名

Swift 2.0提供省略外部参数名可能,在定义函数时,使用下划线(_)表示外部参数名,示例代码如下:

func rectangleArea(width:Double, _ height:Double) -> Double {

let area = width * height

return area

}

这样函数在调用时就可以省略外部参数名,代码如下:

print("320x480的长方形的面积:\(rectangleArea(320,
480))")

在定义函数时第一个参数不需要使用下划线(_),默认第一个参数名是省略的,其他参数名要想省略则需要使用下划线(_)符号。

3.参数默认值

在定义函数的时候可以为参数设置一个默认值,当调用函数的时候可以忽略该参数。看下面的一个示例:

func makecoffee(type :String = "卡布奇诺") -> String {

return "制作一杯\(type)咖啡。"

}

在调用的时候,如果调用者没有传递参数,则使用默认值。调用代码如下:

let coffee1= makecoffee("拿铁")

let coffee2= makecoffee()

最后输出结果如下:

制作一杯拿铁咖啡。

制作一杯卡布奇诺咖啡。

4.可变参数

Swift中函数的参数个数可以变化,它可以接受不确定数量的输入类型参数,它们具有相同的类型。我们可以通过在参数类型名后面加入(...)的方式来指示这是可变参数。

下面看一个示例:

func sum(numbers:Double...) -> Double {

var total: Double = 0

for number in numbers {

total += number

}

return total

}

下面是两次调用sum函数代码:

sum(100.0, 20, 30)

sum(30, 80)

可以看到每次传递参数的个数是不同的。

这是我在学Swift整理的基础笔记,希望给更多刚学IOS开发者带来帮助,在这里博主非常感谢大家的支持!

更多的请到参考我下一篇博文。之后还在持续更新中。。。

时间: 2024-10-18 16:24:57

从0开始学Swift笔记整理(一)的相关文章

从0开始学Swift笔记整理(三)

这是跟在上一篇博文后续内容: --Swift中相关的属性 存储属性 Swift中的属性分为存储属性和计算属性,存储属性就是Objective-C中的数据成员,计算属性不存储数据,但可以通过计算其他属性返回数据.存储属性可以存储数据,分为常量属性(用关键字let定义)和变量属性(用关键var定义). 存储属性概念: 我们在前面曾用到过属性,Employee类和Department结构体.它们的类图如下,Employee 的部门属性dept与Department之间进行了关联. 我们可以在定义存储属

从0开始学Swift笔记整理(五)

这是跟在上一篇博文后续内容: --Core Foundation框架 Core Foundation框架是苹果公司提供一套概念来源于Foundation框架,编程接口面向C语言风格的API.虽然在Swift中调用这种C语言风格的API比较麻烦,但是在OS X和iOS开发过程中,有时候使用Core Foundation框架的API是非常方便的,例如在与C语言混合编码的时候. Core Foundation框架与Foundation框架紧密相关,他们具有与相同的接口,但是不同.Core Founda

从0开始学Swift笔记整理(四)

这是跟在上一篇博文后续内容: --重写方法 重写实例方法 在子类中重写从父类继承来的实例方法和静态方法.先介绍实例方法的重写. 下面看一个示例: class Person { var name: String var age: Int func description() -> String { //实例方法 return "\(name) 年龄是: \(age)" } class func printClass() ->() { //静态方法 print( "P

《从零开始学Swift》学习笔记(Day 57)——Swift编码规范之注释规范:

<从零开始学Swift>学习笔记(Day 57)--Swift编码规范之注释规范:文件注释.文档注释.代码注释.使用地标注释 原创文章,欢迎转载.转载请注明:关东升的博客 前面说到Swift注释的语法有两种:单行注释(//)和多行注释(/*...*/).这里来介绍一下他们的使用规范. 文件注释 文件注释就在每一个文件开头添加注释,文件注释通常包括如下信息:版权信息.文件名.所在模块.作者信息.历史版本信息.文件内容和作用等. 下面看一个文件注释的示例: /* Copyright (C) 201

Deep Learning(深度学习)学习笔记整理系列之(三)

Deep Learning(深度学习)学习笔记整理系列 [email protected] http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04-08 声明: 1)该Deep Learning的学习系列是整理自网上很大牛和机器学习专家所无私奉献的资料的.具体引用的资料请看参考文献.具体的版本声明也参考原文献. 2)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主

Deep Learning(深度学习)学习笔记整理系列 | @Get社区

body { font-family: Microsoft YaHei UI,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5; } html, body { } h1 { font-size:1.5em; font-weight:bold; } h2 { font-size:1.4em; font-weight:bo

关东升的《从零开始学Swift》 即将出版

大家好: 苹果2015WWDC大会发布了Swift2.0,它较之前的版本Swift1.x有很大的变化,所以我即将出版<从零开始学Swift> <从零开始学Swift>将在<Swift开发指南>第1版的基础上添加Swift2.0的内容,同时摒弃第1版的一些不合理的内容,使得本书更加适合Swift开发者.我将连续发一些<从零开始学Swift>的学习笔记,有兴趣者,可以看一下. 附<从零开始学Swift> 此书目录: 第1章 准备起航1.1 本书约定1

Hive笔记整理(三)

[TOC] Hive笔记整理(三) Hive的函数 Hive函数分类 函数的定义和java.mysql一样,有三种. UDF(User Definition Function 用户定义函数) 一路输入,一路输出 sin(30°)=1/2 UDAF(User Definition Aggregation Function 聚合函数) 多路输入,一路输出 max min count sum avg等等 UDTF(User Definition Table Function 表函数) 一路输入,多路输

Deep Learning(深度学习)学习笔记整理系列七

Deep Learning(深度学习)学习笔记整理系列 声明: 1)该Deep Learning的学习系列是整理自网上很大牛和机器学习专家所无私奉献的资料的.具体引用的资料请看参考文献.具体的版本声明也参考原文献. 2)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分不小心侵犯了大家的利益,还望海涵,并联系博主删除. 3)本人才疏学浅,整理总结的时候难免出错,还望各位前辈不吝指正,谢谢. 4)阅读本文需要机器学习.计算机视觉.神经网络等等基础(如果没有也没关系了,没