#1极速学习Swift

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点不同:

  1. 数组是有序的,集合是无序的!!!
  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这个类,并采用UITableViewDataSourceUITableViewDelegate两个协议的话,可以这么写:

class: UITableViewController,UITableViewDelegate,UITableViewDataDource

有两点需要注意:

  1. 在定义一个类并继承与别的类,并采用别的协议的时候,必须先把继承的类名写在协议前面!
  2. 在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中试一试,常量Number2个条件都符合,输出的确实The number is between 0 to 100就是因为Number符合了第1个条件,所以立马跳出switch语句,不会对下面的条件再做判断。上面这段代码也说明Swift的switch语句十分强大,可以支持开区间闭区间


这些资料大部分都是我个人通过阅读官方文档,查阅资料所整理出来最精华的部分,如果你喜欢的话,可以关注我的专题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,617评论 4 59
  • 一直没有时间好好看一下swift,最近复习了一遍语法,这里记录swift学习过程中遇到的一些问题和要点,和Obje...
    bomo阅读 2,271评论 0 25
  • 事件描述:今天早上婆婆拿了几张保险公司的宣传单页来我家说要给小孩买保险,正好最近我一个姐姐在做保险,也和我提到了这...
    许晓凌_中阅读 373评论 0 0
  • 企业能够融到不付利息的资金才能安全,才能长久,才能持续发展。众筹的核心是将利益分享就是不需要支付利息,是企业的金融...
    13899倪同山阅读 386评论 0 0
  • 人们通常会认为哭是脆弱的表现,哭是解决不了问题的,有哭的时间还不如好好想解决问题的办法。但在我看来,有些人哭才是迈...
    LunaLithree阅读 545评论 0 3