// Playground - noun: a place where people can play
import UIKit
//1.声明常量和变量,可以不指定数据类型,编译器会自动识别
let maximumNumberOfLoginAttempts =10
var currentLoginAttempt =0
var x=0.0,y=0.0,z=0.0
//2.类型标注
/* 当你声明常量或者变量的时候可以加上类型标注(type annotation),说明常量或者变量中要存储的值的类型。如果要添加类型标注,需要在
常量或者变量名后面加上一个冒号和空格,然后加上类型名称。*/
var welcomeMessage:String
welcomeMessage="Hello"
//3.常量和变量的命名
var friendlyWelcome ="Hello!"
friendlyWelcome = "Bonjour!"
//friendlyWelcome 现在是 "Bonjour!"
let languageName ="Swift"
//languageName = "Swift++"
//这会报编译时错误 - languageName 不可改变
//4.输出常量和变量
println(friendlyWelcome)
println("This is a string")
/*Swift 用字符串插值(string interpolation)的方式把常量名或者变量名当做占位符加入到长字符串中,Swift会用当前常量或变量的值
替换这些占位符。将常量或变量名放入圆括号中,并在开括号前使用反斜杠将其转义:*/
println("The current value of friendWelcom is\(friendlyWelcome)")
//5.注释
// 这是一个注释
/* 这是一个,
多行注释 */
/* 这是第一个多行注释的开头
/* 这是第二个被嵌套的多行注释 */
这是第一个多行注释的结尾 */
//6.分号
/*与其他大部分编程语言不同,Swift并不强制要求你在每条语句的结尾处使用分号(;),当然,你也可以按照你自己的习惯添加分号。有一种情况下
必须要用分号,即你打算在同一行内写多条独立的语句*/
let cat ="cat";println(cat)
//7.整数,浮点数
let minValue =UInt8.min
let maxValue =UInt8.max
let minValue2=Int.min
let maxValue2=Int.max
let minValue3 =UInt.min
let maxValue3 =UInt.max
//8.数值型字面量
let decimaInteger =17
let binaryInteger =0b10001 //二进制
let octalInteger =0o21 //八进制
let hexdecimalInteger =0x11 //16进制
let decimalDouble =12.1875
let exponentDouble =1.21875e1
let hexadecimalDouble =0xC.3p0
let paddedDouble =000123.456
let oneMillion =1_000_000
let justOverOneMillion =1_000_000.000_000_1
//9.数值型类型转换
//9.1:整数转换
let twoThousand:UInt16 =2_000
let one:UInt8 =1
let twoThousandAndOne =twoThousand +UInt16(one)
//9.2:整数和浮点数转换
let three =3
let pointOneFourOneFiveNine =0.14159
let pi = Double(three) +pointOneFourOneFiveNine
let integerPi =Int(pi)
//10:类型别名
typealias AudioSample =UInt16
var maxAmplitudeFound =AudioSample.min
//11:布尔值
let orangesAreOrange =true
let turnipsAreDelicious =false
if turnipsAreDelicious {
println("Mmm,tasty turnips!")
}
else {
println("Eww,turnips are horrible.")
}
//12:元组
/*元组(tuples)把多个值组合成一个复合值。元组内的值可以使任意类型,并不要求是相同类型。*/
let http404Error = (404,"Not Found")
//http404Error 的类型是 (Int, String),值是 (404, "Not Found")
//你可以将一个元组的内容分解(decompose)成单独的常量和变量,然后你就可以正常使用它们了:
let (statusCode,statusMessage) =http404Error
println("The status code is\(statusCode)")
println("The status message is\(statusMessage)")
//如果你只需要一部分元组值,分解的时候可以把要忽略的部分用下划线(_)标记:
let (justTheStatusCode,_) =http404Error
println("The status code is\(justTheStatusCode)")
//此外,你还可以通过下标来访问元组中的单个元素,下标从零开始:
println("The status code is\(http404Error.0)")
println("The status message is\(http404Error.1)")
//你可以在定义元组的时候给单个元素命名:
let http200Status = (statusCode:200,description:"OK")
println("The status code is\(http200Status.statusCode)")
println("The status message is\(http200Status.description)")
//13:可选(optionals)
//有值,等于x
//或者 没有值
let possibleNumber ="123"
let convertedNumber =possibleNumber.toInt()
convertedNumber 被推测为类型 "Int?",或者类型 "optional Int"
/*if 语句以及强制解析
你可以使用if语句来判断一个可选是否包含值。如果可选有值,结果是true;如果没有值,结果是false。
当你确定可选包确实含值之后,你可以在可选的名字后面加一个感叹号(!)来获取值。这个惊叹号表示“我知道这个可选有值,请使用它。”这被称为可选值的强制解析(forced unwrapping)*/
//报错
/*if convertedNumber {
println("\(possibleNumber) has an integer value of \(convertedNumber!)")
}
else{
println("\(possibleNumber) could not be converted to an integer")
}*/
//可选绑定
iflet actualNumber =possibleNumber.toInt() {
println("\(possibleNumber) has an integer value of \(actualNumber)")
}
else {
println("\(possibleNumber) could not be converted to an integer")
}
//nil
//你可以给可选变量赋值为nil来表示它没有值:
var serverResponseCode:Int? =404
serverResponseCode = nil
var surveryAnswer:String?
//隐式解析可选
//下面的例子展示了可选String和隐式解析可选String之间的区别:
let possibleString:String? ="An optional string"
println("possibleString!")
let assumedString:String! ="An implicity unwrapped optional string."
println(assumedString)
//14:断言
/*可选可以让你判断值是否存在,你可以在代码中优雅地处理值缺失的情况。然而,在某些情况下,如果值缺失或者值并不满足特定的条件,你的代码可能并不需要继续执行。
这时,你可以在你的代码中触发一个断言(assertion)来结束代码运行并通过调试来找到值缺失的原因*/
let age =5
assert(age >=0,"A person's age can not be less than zero")
/*何时使用断言
当条件可能为假时使用断言,但是最终一定要保证条件为真,这样你的代码才能继续运行。断言的适用情景:
整数的附属脚本索引被传入一个自定义附属脚本实现,但是下标索引值可能太小或者太大。
需要给函数传入一个值,但是非法的值可能导致函数不能正常执行。
一个可选值现在是nil,但是后面的代码运行需要一个非nil值。*/
//欢迎大家讨论 学习