Swift这门语言我不想多介绍了,只要你有一定的编程基础,学习swift将会是一个轻松愉快的过程。
本次的内容:
- 变量,常量与类型推断
- 基本字符串操作
- 数组
- 字典
- 集合
- 类
- 方法
- 控制流
变量,常量与类型推断
Swift中,定义变量使用var
, 常量使用let
. 比如:
var variable:String = "Hello,Swift!"
let constant:Int = 100
Swift中的基本类型为几下几种:
- Int
- Double
- Bool
- String
Swift有一个特性——类型推断!
也就是说Swift可以自动推导出你所给的变量是什么类型!那么上面两行代码可以改为:
var variable = "Hello,Swift!"
let constant = 100
基本字符串操作
定义2个字符串:
let message1 = "Swift is awsome! "
let message2 = "What do you think? "
如何连接两个字符串?用+
即可:
let message1 = "Swift is awsome! "
let message2 = "What do you think? "
var combineMessage = message1 + message2
print(combineMessage) //输出结果为“Swift is awsome! What do you think? \n”
如何比较两个字符串是否相等?用==
即可:
let string1 = "Swift"
let string2 = "Swift"
if string1 == string2{
print("Both are same!") //因为2个字符串一样,所以会输出"Both are same!\n"
}
计算字符串字符个数:
let message1 = "Hello"
message1.characters.count //返回值会是5
数组
Swift中定义数组的方式有点像OC。举个例子:
Objective C:
NSArray *recipes = @[@"Burger",@"Full Breakfast",@"Ham and Egg Sandwich"];
Swift:
var recipes = ["Burger","Full Breakfast","Ham and Egg Sandwich"]
有一点需要注意:**与OC不同,Swift数组中的值只能是同一个类型,比如上述代码的变量recipes
里面的值只能是String
类型. 因为Swift有类型推断,数组recipes
会被自动推断为字符串数组。
Swift中提供了许多方法对数组进行操作,比如:
常用范例1:求数组中元素的个数
var recipes = ["Burger","Full Breakfast","Ham and Egg Sandwich","Milk"]
recipes.count
//返回值会是3
常用范例2:为数组中添加元素
var recipes = ["Burger","Full Breakfast","Ham and Egg Sandwich"]
//格式:recipes += ["你想添加的1个或多个元素"]
recipes += ["Cake"]
recipes += ["Beef","Vegetable Salad"]
常用范例3:访问或修改数组中的某个元素
//取出数组的第0位
var recipeItem = recipes[0]
//修改数组的第1位
recipes[1] = "Full Dinner"
//修改数组的1到3位
recipes[1...3] = ["Cheese Cake","Greek Salad","Braised Beef Cheeks"]
那么现在数组recipes
中的元素应该是这样的:
- Burger
- Cheese Cake
- Greek Salad
- Braised Beef Cheeks
字典
Swift提供几种最常用的集合类型:数组,字典,集合现在我们来谈一谈字典。字典中每个vaule都会与一个key成对出现。举个例子:
var companies = ["KEY":"VAULE","APPL":"Apple Inc","GOOL":"Google","FB":"Facebook"]
那么把字典的定义格式总结出来便是这样的:
let dictionary = [KEY:VAULE,KEY2:VAULE2.....]
常用范例1:遍历一个字典
for (key,vaule) in companies{
print("key is \(key),vaule is \(vaule)")
}
常用范例2:遍历字典中的key或vaule
//遍历key
for key in companies.keys{
print("stock code is \(key)")
}
//遍历vaule
for vaule in companies.vaules{
print("name is \(vaule)")
}
常用范例3:为字典修改或添加一组key,vaule
//添加格式:dictionary[你要添加的key] = 你所要添加的vaule
companies["AMZN"] = "sdfsdd"
//修改格式:dictionary[字典中你要修改的key] = 你所要修改的vaule
companies["AMZN"] = "Amazon.com Inc"
集合
Swift中集合的定义很像数组,但与数组有2点不同:
- 数组是有序的,集合是无序的!!!
-
数组可以使用类型推断,集合不能,必须声明类型否走会被视为是一个数组!
举个例子:
//定义集合
let set1:Set = [1,3,5,7,9]
//定义数组
let array = [1,3,5,7,9]
//把上面2调代码放入playground里面,看看有什么不同
常用范例1:为集合添加元素
set1.insert = (11)
常用范例2:比较2个集合
let set2 = [2,3,5,15,8]
//求出2个集合的相同部分
set1.intersection(set2)
//求出2个集合不同的部分
set1.symmetricDifference(set2)
上述代码第1段的返回值会是:
{3,5}
第二段代码的返回值为:
{1,7,9,2,15,8}
类
在Swift中定义一个类,我们使用class
关键字,举个例子:
class Recipe{
var name:String = ""
var price:Int = 10
var ingredients = ["egg"]
}
在swift中,有一点必须要注意:每个属性你都必须给它一个初始值!那如果我不想给它初始值该怎么办?使用可选类型你可能会为此感到疑惑,其实很简单,就是在变量的类型后面加上一个+
. 可选类型以后会提到,现在不理解没关系,那么上面的Recipe
可变为:
class Recipe{
var name:String?
var price:Int = 10
var ingredients:[String]?
}
上面的代码中,变量name
和数组ingredients
都被赋了1个默认值nil
可以把它理解为“空的”吧。这是可选类型,我们将会在下一章讨论。把一个类实例化可以这么写:
var aRecipe = Recipe() //实例化一个类
aRecipe.name = "Ham" //使用“点语法”访问每个属性
aRecipe.price = 20
aRecipe.ingredients = ["egg","vegetable","potato"]
Swift允许你对类进行继承并采用协议。举个例子:我要定义一个myView
的类,这个类要继承自UITableViewController
这个类,并采用UITableViewDataSource
和UITableViewDelegate
两个协议的话,可以这么写:
class: UITableViewController,UITableViewDelegate,UITableViewDataDource
有两点需要注意:
- 在定义一个类并继承与别的类,并采用别的协议的时候,必须先把继承的类名写在协议前面!
- 在swift语言中,实现了单继承机制,但是允许不继承,没有任何继承的类为基类;有继承的类为子类,被继承的类为该子类的父类:我们称父类派生了子类,子类继承了父类。
方法
在Swift允许你在类,结构体,枚举中定义方法。我们使用func
关键字定义方法。下面举个例子,在类中定义一个没有返回值的方法:
class learnMethods{
func saySomething(){
print("Swift is future")
}
}
Swift中使用点语法来调用方法:
let say = learnMethods()
say.saySomething()
下面我们在类中写个带返回值的方法:
class learnMethods2{
func sayMyName(name:String) -> Int {
print("Hello\(name)!")
return name.characters.count
}
}
返回值的语法可能有点怪,使用->
来申明返回值的类型。我们来总结一下方法的定义规则:
func 函数名(参数名:参数类型) -> 返回值类型{
}
把下面这段代码在playground的中练一练:
let learn = learnMethods2()
let temp = learn.sayMyName(name:"Bryant")
print(temp)
看看控制台的输出结果和旁边显示栏的返回值。
控制流
Swift的控制流语法比较像C,我们来看一看。
for循环当你只是想迭代一个范围内的数据时,我们使用...
和..<
来确定这组数句的范围。...
叫开区间,..<
叫闭区间。如何区别...
和..<
二者呢?举个例子:
for i in 1..<5{
print("index = \(i)")
}
输出的结果会是:
index = 1
index = 2
index = 3
index = 4
当我们使用...
时:
for i in 1...5{
print("index = \(i)")
}
输出结果会是:
index = 1
index = 2
index = 3
index = 4
index = 5
现在明白2者的区别了吧!
is-else语句 功能与C,OC,Java相同不做过多介绍,语法也十分相似。
举个例子:
var bookPrice = 1000
if bookPrice >999{
print("It's too expensive!")
}else{
print("I can pay for it! ")
}
同样你也可以使用else-if语句。
switch语句switch语句与OC相比有了一个巨大的提升,Let's take a look!
let name1 = "Jerry"
switch name1 {
case "Bryant":
print("Sounds cool!")
case "Jerry":
print("Sounds interresting!")
case "Jack":
print("It's boring!")
default:
print("I don't know!")
}
如果你学过别的编程语言,你看到有什么不同的地方吗???
首先,Swift支持对字符串进行处理;其次,发现没有每个case后面不用加break
,如果你学过C或别的语言,你便知道switch语句中每个条件后面是要加break的,如果不加,系统会视为继续判断下一个条件。Swift不同,只要你符合了其中的1个条件,会立马退出,即使下面有同样符合的条件也不会进行判断了所以每个case后面不必要加break
. 为了更好的理解,再举个栗子:
let Number = 99
switch Number {
case 0...100:
print("The number is between 0 to 100")
case 1...99:
print("The number is between 0 to 99")
default:
break
}
把这段代码打到playground中试一试,常量Number
2个条件都符合,输出的确实The number is between 0 to 100
就是因为Number符合了第1个条件,所以立马跳出switch语句,不会对下面的条件再做判断。上面这段代码也说明Swift的switch语句十分强大,可以支持开区间和闭区间
网友评论