import Foundation

//***********************************************************************************************

//1.Hello world

//_______________________________________________________________________________________________

//输出 "Hello, world"

println("Hello, world")    //使用 println
函数来输出字符串

//***********************************************************************************************

//2.Simple Values(简单值)

//_______________________________________________________________________________________________

//使用 let
命名常量,使用 var 命名变量

myVariable

println("The constant is\(myConstant),the variable is\(myVariable)")

//_______________________________________________________________________________________________

//声明数据类型

let explicitDouble:Double =

println("The Double type number is\(explicitDouble)")

//_______________________________________________________________________________________________

//类型转化

let label =
"The width is "

let widthLabel =
label + String(width)     //不同类型数据进行基本运算的时候须要进行类型转化

println(widthLabel)

//_______________________________________________________________________________________________

//简单的字符串引用数据

let appleSummary ="I have
\(apples) apples"

println(appleSummary)

//_______________________________________________________________________________________________

//数组创建和使用

var shoppingList = ["water","bread",
"milk","paper",
"pen"]

])           //获取数组中的第三个元素

//_______________________________________________________________________________________________

//字典的创建和使用

var occupations = ["Malcolm":"Captain",
"Kaylee":"Mechanic"]

occupations["Jayne"] ="Public relations"      //给字典加入或者改动一个元素。系统检索字典
occupations是否包括 key
值 Jayne,假设有进行 key
相应的 value 值的改动,假设没有,进行新的 key和 value
的加入

println(occupations)

//_______________________________________________________________________________________________

//创建空的数组和字典

let emptyArray = [String]()    //创建空的数组

let emptyDictionary =Dictionary<String,Float>()
      //创建空的字典

//***********************************************************************************************

//3.Control Flow(控制流)

//_______________________________________________________________________________________________

//简单的控制语句

,,
, , ]

for score inindividualScores{

if score >
{             //if
语句之后必须为返回一个 Bool类型的数据

teamScore +=

}

else{

teamScore +=

}

}

println("The teamscore is\(teamScore)")

//_______________________________________________________________________________________________

//可选类型数据

var optionalString:String?

=
"Hello"

optionalString ==
nil       //设置 optionalString数据为可选类型数据,可选类型是指 optionalString有详细的值或者为空两种情况

var optionalName:String? =
"Joho Appleseed"

var greeting ="Hello"

if let name =optionalName{        //使用
if let 来推断可选类型数据是否有详细的值

greeting =
"Hello,\(name)"

}

println(greeting)

//_______________________________________________________________________________________________

//switch 语句

let vegetable ="red pepper"

var vegetableComment:String

switch vegetable{          //使用 switch
语句。每一条 case
代表一条推断。符合条件则运行语句

case"celery":

vegetableComment ="Add some raisins and make ants on a log."

case"cucumber","watercress":

vegetableComment ="That would make a good tea sandwich."

caselet x
where x.hasSuffix("pepper"):            //使用
"x.hasSuffix("***")"函数来推断 x
变量末尾是否为 ***

vegetableComment ="Is it a spicy
\(x)?

"

default:

vegetableComment ="Everything tastes good in soup."

}

println(vegetableComment)

//_______________________________________________________________________________________________

//使用 for in

,,
, , , ],,,
, , , ],,,
, , ],]

for (kind, numbers)in
interestingNumbers{

for number
in numbers{

if number >
largest{

largest = number

}

}

}

println("The largest number is\(largest)")

//_______________________________________________________________________________________________

//使用 while
/do while 语句

whilen <
{

n =

}

println("the n is\(n)")

do{

m =

}while

println("the m is\(m)")

//_______________________________________________________________________________________________

//范围运算符

for iin
..<{            //使用 "..<"表示前闭后开范围

firstForLoop += i

}

println("firstForLoop is\(firstForLoop)")

forvar i =
; i <; ++i{     
//使用一般方法进行运算

secondForLoop += i

}

println("secondForLoop is\(secondForLoop)")

for iin
...{            //使用 "..."表示前闭后闭范围

thirdForLoop += i

}

println("thirdForLoop is\(thirdForLoop)")

//***********************************************************************************************

//4.Function and Closures(函数和闭包)

//_______________________________________________________________________________________________

//函数的创建和使用

func greet(name:
String, day:
String) ->
String{       
//使用 "func
函数名(參数) ->
返回值类型{ return *** }" 来创建一个函数

return"Hello
\(name), today is
\(day)"

}

println(greet("Bob","Tusday"))

//_______________________________________________________________________________________________

//无參数的函数

func getGasPrices() -> (Double,Double,
Double){       //函数參数为空

return (3.59,3.69,
3.79)

}

println(getGasPrices())

//_______________________________________________________________________________________________

//不确定參数的函数

func sumOf(numbers:Int...) ->
Int{        //当函数參数不确定数量的时候,使用 "..."就可以

var sum =

for number
in numbers{

sum += number

}

return sum

}

println))

//_______________________________________________________________________________________________

//函数嵌套

func returnFifteen() ->Int{

var y =

func add(){

y +=

}

add()

return y

}

println(returnFifteen())

//_______________________________________________________________________________________________

//函数作为返回值

func makeIncrementer() -> (Int ->Int){    
//定义返回值为函数类型的函数 makeIncrementer

func addOne(number:
Int) -> Int{

return
+ number

}

return
addOne

}

var increment =makeIncrementer()

))

//_______________________________________________________________________________________________

//函数做參数

func hasAnyMatches(list: [Int], condition:Int ->Bool)
-> Bool{    //设置參数为整型数组和函数类型的函数 hasAnyMatches

for item
in list{

if condition(item){

return
true

}

}

return
false

}

func lessThanTen(number:Int) ->
Bool{     //定义函数符合 hasAnyMatches的參数类型

return number <

}

,,
, ]

println(hasAnyMatches(numbers,lessThanTen))

//_______________________________________________________________________________________________

//闭包

,,
, , ]

let number =numberArray.map({
          //Swift 中的 Array中有一个 map
方法。其获取的一个闭包表达式作为其唯一參数,数组中的每个元素调用次该闭包函数。并返回该元素所映射的值,详细的映射方式和返回值类型由闭包来指定

(number:Int) -> Int
in

let result =
* number

return result

})

println(number)

//***********************************************************************************************

//5.Objects and Classes(对象和类)

//_______________________________________________________________________________________________

//类的创建

class Shape{               //使用 class声明一个类,类中的属性声明和声明常量变量一样。方法和函数声明是同样的方式

var numberOfSides =

func simpleDescription() ->
String{

return"A shape with
\(numberOfSides) sides."

}

}

//_______________________________________________________________________________________________

//使用类

var shape =
Shape()    
//实例化一个类。注意类名首字母大写

shape        
//设置类的属性

var shapeDescription =shape.simpleDescription()       //訪问类的方法

println(shapeDescription)

//_______________________________________________________________________________________________

//使用 init
创建一个类的初始化器

class NamedShape{

var numberOfSides:

var name:
String

init(name:
String){

self.name = name       //self
用来区分属性和參数,在初始化这个类时,每一个初始值必须设置

}

func simpleDescription() ->
String{

return"\(name) find A shape with\(numberOfSides)
sides."

}

}

var name =
NamedShape(name:
"Listo")    
//实例化而且初始化类 NameShape

name

var nameDescription =name.simpleDescription()

println(nameDescription)

//_______________________________________________________________________________________________

//继承和覆写

class Square:NamedShape{

var sideLength:
Double

init(sideLength:
Double, name:String){

self.sideLength = sideLength

super.init(name: name)

}

func area() ->
Double{

returnsideLength *
sideLength

}

override
func simpleDescription() ->String {          
//使用 override来覆写父类中的方法

return"A square with sides of length
\(sideLength)"

}

}

let test =Square(sideLength: 
5.2, name: "my test square")

println(test.area())

println(test.simpleDescription())

//_______________________________________________________________________________________________

//除了简单的存储属性。属性能够有一个 getter和 setter

class EquilateralTriangle:NamedShape{

var sideLength:
Double =0.0

init(sideLength:
Double, name:String){

self.sideLength = sideLength

super.init(name: name)

}

var perimeter:
Double{

get{

return
3.0 *sideLength            
//get 为获取这个属性的值

}

set{

sideLength = newValue /
3.0         //newValue
代表 set给这个属性的新的值

}

}

override
func simpleDescription() ->String {

return"An equilateral triangle with side of length
\(sideLength)"

}

}

var triangle =EquilateralTriangle(sideLength:
3.1, name: "a triangle")

println(triangle.perimeter)

triangle.perimeter =9.9

println(triangle.sideLength)

//_______________________________________________________________________________________________

//类中的方法和函数的差别

class Counter{

var count:

func incrementBy(amount:
Int, numberOfTimes times:
Int){

count += amount * times

}

}

var counter =Counter()

counter.incrementBy(2,
numberOfTimes: 7)       //类中的方法须要在调用的时候写出參数的形參名(第一个參数名不能够写),函数在调用的时候除了外部參数存在的情况,否则不能參数的形參名

//***********************************************************************************************

//6.Enumeration and Structures(枚举和结构体)

//_______________________________________________________________________________________________

//枚举的创建

enum Rank:
Int{        
//使用 enum
创建一个枚举,注意枚举名用大写

//指定第一个原始值为 1,后面的数据一次递增分配

case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten

case Jack, Queen, King

func simpleDescription() ->
String{

switchself{       //这里的
self 就是一个枚举类型的值(enum value)

case .Ace:

return
"ace"

case .Jack:

return
"jack"

case .Queen:

return
"queen"

case .King:

return
"king"

default:

returnString(self.toRaw())
   //使用 toRaw
和 fromRaw 来实现原始值和枚举值的转换

}

}

}

let ace =Rank.Ace

println(ace.simpleDescription())

let aceRawValue =ace.toRaw()

println(aceRawValue)

iflet convertedRank =
){

let threeDescription = convertedRank.simpleDescription()

println(threeDescription)

}

//_______________________________________________________________________________________________

//枚举成员是实际的值,不是其原始值的第二种表达方式

enum Suit{

case Spades, Hearts, Diamonds, Clubs

func simpleDescription() ->
String{

switch
self{

case .Spades:

return
"spades"

case .Hearts:

return
"hearts"

case .Diamonds:

return
"diamonds"

case .Clubs:

return
"clubs"

}

}

}

let hearts =Suit.Hearts

let heartDescription =hearts.simpleDescription()

println(heartDescription)

//_______________________________________________________________________________________________

//结构体的创建(结构体和类之间最重要的一个差别是,结构体通过复制传递。类通过引用传递)

struct Card{       //创建结构体,结构体名大写

var rank:
Rank

var suit:
Suit

func simpleDescription() ->
String{

return"The
\(rank.simpleDescription()) of\(suit.simpleDescription())"

}

}

let threeOfSpades =Card(rank: .Three, suit: .Spades)

let threeOfSpadesDescription =threeOfSpades.simpleDescription()

println(threeOfSpadesDescription)

//_______________________________________________________________________________________________

//枚举的应用

enum ServerResponse{

case Result(String, String)

case Error(String)

}

let success =
ServerResponse.Result("6:00 am","8:09 pm")

let failure =
ServerResponse.Error("Out of cheese")

var serverResonse:String

switch success{

caselet .Result(sunrise, sunset):

serverResonse ="Sunrise is at
\(sunrise) and sunset is at\(sunset)"

caselet .Error(error):

serverResonse =
"Failure...\(error)"

}

println(serverResonse)

//***********************************************************************************************

//7.Protocols and Extensions(协议和扩展)

//_______________________________________________________________________________________________

//协议的创建

protocol ExamplePortocol{      //使用 protocol
创建协议,协议名要大写

var simpleDescription:
String { get}

mutating
func adjust()

}

//_______________________________________________________________________________________________

//类,枚举,结构体都能够写协议

class SimpleClass:ExamplePortocol{            
//类遵守协议。必须实现协议中的方法

var simpleDescription:
String = "A very simple class."

var anotherProperty:

func adjust(){                             
//在类中书写协议方法是不须要加上 mutating,由于一个类的方法能够改动类

simpleDescription +=" Now 100% adjusted."

}

}

var a = SimpleClass()

a.adjust()

let aDescription =a.simpleDescription

println(aDescription)

struct SimpleStructure:ExamplePortocol{       
//结构体遵守协议。必须实现协议中的方法

var simpleDescription:
String = "A simple structure"

mutating 
func adjust() {                  //在结构体中书写协议方法时要记得加上 mutating

simpleDescription +=" (adjusted)"

}

}

var b = SimpleStructure()

b.adjust()

println(b.simpleDescription)

//_______________________________________________________________________________________________

//使用 extension将扩展功能加入到现有的类型中

extensionInt:
ExamplePortocol{            //为协议加入功能

var simpleDescription:
String{

return"The number
\(self)"

}

mutating
func adjust(){

self +=

}

}

//_______________________________________________________________________________________________

//使用协议作为数据类型

let protocolValue:ExamplePortocol =
a

println(protocolValue.simpleDescription)

//***********************************************************************************************

//8.Generics(通用数据类型)

//_______________________________________________________________________________________________

//尖括号内写一个名字做一个通用的函数或类型

func repeat<ItemType>(item:ItemType, times:
Int) -> [ItemType] {      //做通用的类型

var result = [ItemType]()

for i
..<times{

result += item

}

return result

}

println))

//_______________________________________________________________________________________________

//你能够通用形式的函数和方法,以及类、枚举、结构

enum OptionalValue<T>{

case None

case some(T)

}

var possibleInteger:OptionalValue<Int> = .None

possibleInteger)

println(possibleInteger)

冷市攻略:Listo 教你 25 今天的社会 Swift 语言 - 02 Swift Tour的更多相关文章

  1. UI设计行业中的“延禧攻略”,教你从青铜变王者

    最近一直在追<延禧攻略>,女主魏璎珞敢爱敢恨,有仇必报的性格吸引不少人,她从低贱的秀坊小宫女步步为营,最终成为皇帝最宠爱的令妃呼风唤雨.尔虞我诈的后宫,想要打怪升级光有颜值是万万不够的,更 ...

  2. 从HTML原型到jsp页面完美转型攻略(教你即使不会写代码也能弄出漂亮的网页)

    大家都知道软件项目(web)开发之前都要先做原型设计,而我们使用的比较多的一款原型设计软件就是Axure rp了.在Axure rp上画原型不需要任何编码能力,而且生成的原型可以在浏览器上运行.除了没 ...

  3. 寒城攻略:Listo 教你用Swift 语言编写 IOS 平台流媒体播放器

    先展示播放器效果:   依然继承 Listo 本人的强迫症,还是从最初到完毕完整的写一个攻略来记录一下,这里声明 Listo 本人也是看了非常多的戴维营攻略才总结分享给大家这一篇攻略的. 首先,Lis ...

  4. 寒城攻略:Listo 教你用 Swift 写IOS UI 项目计算器

    之前总结过 Swift 的语言攻略,这里就不做赘述了,如今做一个实例计算器项目来介绍一下 Swift 的应用.(凝视已经全然.直接上代码) 先看一下效果图: 以下是详细的代码和解释: 分享快乐.开源中 ...

  5. 30天,O2O速成攻略【7.25北京站】

    活动概况 时间:2015年7月25日13:30-16:30 地点:车库咖啡(北京市海淀西大街48号鑫鼎宾馆二层) 主办:APICloud.领通科技.快易行 网址:www.apicloud.com 费用 ...

  6. Windows安全攻略:教你完全修复系统漏洞

    Windows安全攻略:教你完全修复系统漏洞 首发:http://safe.it168.com/a2012/0709/1369/000001369740.shtml 目前互联网上的病毒集团越来越猖狂, ...

  7. Cross-Site Scripting XSS 跨站攻击全攻略 分类: 系统架构 2015-07-08 12:25 21人阅读 评论(2) 收藏

    原文:http://a1pass.blog.163.com/blog/static/2971373220087295449497/ 题记:这是我在<黑客X档案>08年第5期发表的一篇文章, ...

  8. 超时空英雄传说2复仇魔神完全攻略&秘技

    ╓─╥───────────────────────────────────────────────────╥─╖ ║ ║ 超 時 空 英 雄 傳 說 2 ║ ║ ║ ║ --復 仇 魔 神-- ║ ...

  9. 【与软件无关】2013赤峰地区C1科目三考试攻略【绝对原创】

    期待很久的科目三,终于在开考了.传说中的全部电子评判,让习惯给考官送礼的赤峰人民无所是从.据说前几天曾经有一个驾校,考了一整天,八十多个人一个没过的. 我这个攻略是今天通过考试后的一点心得,希望能有用 ...

随机推荐

  1. 调用一个系统命令,并读取它的输出值(使用QProcess.readAll)

    下面我们再看一个更复杂的例子,调用一个系统命令,这里我使用的是 Windows,因此需要调用 dir:如果你是在 Linux 进行编译,就需要改成 ls 了. mainwindow.h #ifndef ...

  2. windows程序员进阶系列:《软件调试》之Win32堆的调试支持

    Win32堆的调试支持 为了帮助程序员及时发现堆中的问题,堆管理器提供了以下功能来辅助调试. 1:堆尾检查(Heap Tail Check) HTC,在堆尾添加额外的标记信息,用于检测堆块是否溢出. ...

  3. 后缀数组--可重叠的K次最长重复子串(POJ3261)

    题目:Milk Patterns #include <stdio.h> #include <string.h> #define N 1000010 int wa[N],wb[N ...

  4. 关于ubuntu下qt编译显示Cannot connect creator comm socket /tmp/qt_temp.xxx/stub-socket的解决的方法

    今天在ubuntu下安装了qtcreator,准备測试一下能否用.果然一測试就出问题了,简单编写后F5编译在gnome-terminal中出现 Cannot connect creator comm ...

  5. efwplus框架

    此框架得到博客园大神@张善友的关注,建议我写一篇此框架的最新介绍,好在@dotNet跨平台公众号上推荐给大家,得到大神的指示当然激动,马不停蹄的赶出此文,供大家参考!   一.使用efwplus框架的 ...

  6. ThinkPHP3.2 常量参考

    原文:ThinkPHP3.2 常量参考 预定义常量 预定义常量是指系统内置定义好的常量,不会随着环境的变化而变化,包括: URL_COMMON 普通模式 URL (0) URL_PATHINFO PA ...

  7. How-To: add EPEL repository to Centos 6.x is Easy!

    How-To: add EPEL repository to Centos 6.x is Easy! | ITek Blog How-To: add EPEL repository to Centos ...

  8. Scriptcase价格调整(五折销售)

    芬兰诺基亚!芬兰诺基亚!最大手机公司倒闭了!王八蛋老板埃洛普,吃喝嫖赌欠下了3.5个亿,带着他的小姨子跑了!我们没有办法,拿着手机抵工资!原价都是一千多.两千多.三千多的手机,统统二百块!统统二百块! ...

  9. OCP读书笔记(5) - 使用RMAN创建备份

    5.Creating Backups with RMAN 创建备份集 RMAN> backup as backupset format '/u01/app/oracle/backup/rmanb ...

  10. Session为空的一种原因

    在维护一份比较老的代码,想改为ajax调用,然后就添加了一个一般处理程序文件,也就是以.ashx结尾的文件,一切都正常,但发现session一直为空,很奇怪 基本的代码如下: public class ...