Swift 是一种适用于 iOS 和 OS X 应用的全新编程语言,它创建在最好的 C 和 Objective-C 语言之上,而且没有 C 语言的兼容性限制。Swift 采用安全的编程模式,增长了现代功能使 编程更容易、更灵活、更有趣。Swift 以成熟且备受宠爱的 Cocoa 和 Cocoa Touch 框架为 支撑,这是一个从新构想软件开发的机会。 算法
import Foundation //表示引入Foundation框架数据库
var str = "Hello World" //声明str变量,var表示声明变量编程
print(str) //print(_:)是一个函数,可以将变量或常量输出到控制台swift
Swift程序不能在Windows其余平台编译和运行,有人提供了一个网站swiftstub.com,能够在任何平台下编译和运行Swift程序。数组
在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程序运行 ①区域是代码编写视图;②区域是运行结果视图;③区域是时间轴视图;④区域是控制台视图,使用print等日志函数将结果输出到控制台,能够经过左下角的 按钮隐藏和显示控制台。数据结构
标识符就是给变量、常量、方法、函数、枚举、结构体、类、协议等由开发人员指定的名字。app
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声明,虽然在业务层面上并非一个常量,而是防止程序运行过程当中错误地修改它引用。
print(_:)。输出变量或常量到控制台,而且换行。
print(_:_:)。输出变量或常量到指定类型的流中,而且换行。
print(_:appendNewline:)。输出变量或常量到控制台,appendNewline参数是布尔值,true表示换行,false表示不换行。
print(_:_:appendNewline:) 。输出变量或常量指定类型的流中,appendNewline参数是布尔值,true表示换行,false表示不换行。
一、不指定数据类型 var a1 = 10
二、指定数据类型 var a1:Int = 10
三、使用分号 var a1:Int = 10; var a2:Int = 20
在Swift语言中,一条语句结束后能够不加分号也能够添加分号,可是有一种状况必需要用分号,那就是多条语句写在一行的时候,须要经过分号来区别语句。
例如: var a1:Int = 10; var a2:Int = 20;
在Swift语言中主要的运算符包括算术、关系、逻辑、位运算符等
一元运算符:
- 取反符号 取反运算
++ 自加一 先取值再加一,或先加一再取值
-- 自减一 先取值再减一,或先减一再取值
二元运算符:
+ 加 求和,还可用String类型,进行字符串链接操做
- 减 求差
* 乘 求积
/ 除 求商
% 取余 求余数
几个特殊运算符:
• 引用号(.):实例调用属性、方法等操做符。
• 问号(?):用来声明可选类型。
• 感叹号(!):对可选类型值进行强制拆封。
• 箭头(->):说明函数或方法返回值类型。
• 冒号运算符(:):用于字典集合分割“键值”对。
整型、浮点型、布尔型、字符、字符串这些类型是必定有的,其中集合、枚举、结构体、类也是Swift中的数据类型。元组是Swift中特有的。
元组是一种数据结构,在数学中应用普遍。在计算机科学中,元组是关系数据库中的基本概念,元组表中的一条记录,每列就是一个字段。所以在二维表里,元组也称为记录。
如今使用Swift语法表示Student元组就是:
第一种写法
("1001", "张三", 30, 90)
第二种写法
(id:"1001", name:"张三", english_score:30, chinese_score:90)
Swift提供八、1六、3二、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等其余语言中,整型之间有两种转换方法:
一、 从小范围数到大范围数转换是自动的;
二、 从大范围数到小范围数须要强制类型转换,有可能形成数据精度的丢失。
而在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类型的时候可使用下面的语句之一。
varStringvarStringstudentDictionary1: Dictionary<Int,>
studentDictionary2: [Int:]
声明的字典须要进行初始化才能使用,字典类型每每是在声明的同时进行初始化的。
102"张三"105"李四"109"王五"var studentDictionary1: Dictionary<Int, String>
= [:,:,:]
102"张三"105"李四"109"王五"var studentDictionary2 = [:,:,:]
102"张三"105"李四"109"王五"let studentDictionary3 = [:,:,:]
字典遍历
字典遍历过程能够只遍历值的集合,也能够只遍历键的集合,也能够同时遍历。这些遍历过程都是经过for-in循环实现的。
var102"张三"105"李四"109"王五"studentDictionary = [:,:,:]
print"---遍历键---"forinprint"学号:\(studentID)"()
studentIDstudentDictionary.keys {
()
}
print"---遍历值---"forinprint"学生:\(studentName)"()
studentNamestudentDictionary.values {
()
}
print"---遍历键:值---"forinprint"\(studentID) : \(studentName)"()
(studentID, studentName)studentDictionary {
()
}
运行结果以下:
---遍历键---
学号:105
学号:102
学号:109
---遍历值---
学生:李四
学生:张三
学生:王五
---遍历键:值---
105 : 李四
102 : 张三
109 : 王五
数组(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开发者带来帮助,在这里博主很是感谢你们的支持!
更多的请到参考我下一篇博文。以后还在持续更新中。。。