//================Demo1--Day1=================
/**
*1.常量变量
*/
varstr ="Hello, playground"
print(str)
varmyStr ="Hello,Word"
myStr="王云鹏,你好啊"
letyourStr ="你是常量啊"//常量不可以修改的
print(myStr)
/**
*2.类型推断
*/
varint1 =9
//int1 = 10.0这样的话会报错,因为之前已经判断int1是整型了
//赋值的时候直接给定类型变量后面声明类型,用冒号分割。
letint2:Int=9
//创建一个常量,显式指定类型为Float并指定初始值为4。
letpractiseNumber:Float=4
/**
*3.类型转换
*/
//值永远不会被隐式转换为其他类型。如果你需要把一个值转换成其他类型,请显式转换。
varlabel1 ="The width is"
varwidth=100
//var widthLabel1 = label1 + width这样会报错,因为两者类型不统一,可以转换下
//转换的方式和OC不一样。括号里面放的是被转换的变量,类型不加括号
varwidthLabel1 =label1+String(width)
//练习
varwidth2 =200
//width2 = 1.0现在是不支持float的转换下
varwidth3 =Float(width2)
//width3此时已经是float类型的了
letthree =3
letpointOneFourOneFiveNine =0.14159
letpi =three+Int(pointOneFourOneFiveNine)
//有一种更简单的把值转换成字符串的方法:把值写到括号中,并且在括号之前写一个反斜杠
varnum1 =12.00
varnum2 =13.00
varnum3:Int=Int(num1+num2)//这样写也是可以的,嘿嘿,多多尝试
//练习:使用\()来把一个浮点计算转换成字符串,并加上某人的名字,和他打个招呼。
print("你好,\(num1+num2)")
/**
*4.使用方括号[]来创建数组和字典,并使用下标或者键(key)来访问元素。
*/
//数组
vararr1 = ["a","b","c","d"]
varnumStr =arr1[2]
print(arr1)
//字典
vardic1 = ["我的名字":"王云鹏",
"你的名字":"毛艳艳"]
varvalueMe =dic1["我的名字"]
varvalueYou =dic1["你的名字"]
varoccupations = [
"Malcolm":"Captain",
"Kaylee":"Mechanic",
]
occupations["Jayne"] ="Public Relations"//这也算是一个键值对的赋值,类似于一个插入新的key-value的作用但是好像顺序不是按照后来的在后面的顺序,最后这个怎么在了中间??难道那个语法是起插入作用么??
print(occupations)
//要创建一个空数组或者字典,使用初始化语法。
vararr2 = []//这不也是创建一个空数组么??为什么要使用初始化语法呢?答案在下面
vartemptyArr1 = [String]()//初始化一个空的字符串数组
vartemptyArr2 = [Int]()//初始化一个空的整型数组
//初始化字典
letemptyDictionary = [String:Float]()
//如果类型信息可以被推断出来,你可以用[]和[:]来创建空数组和空字典——就像你声明变量或者给函数传参数的时候一样。
vararr3NoItem = []
vardic1NoItem = [:]
/**
*5.控制流使用if和switch来进行条件操作,使用for-in、for、while和do-while来进行循环。包裹条件和循环变量括号可以省略,但是语句体的大括号是必须的。
*/
vararr3 = [12,13,14,15,16]
arr3.insert(17, atIndex:arr3.count)//插入一个
varteamScore =0
//快速枚举forIn遍历
forscoreinarr3{
ifscore >13{
teamScore+=3
}else{
}
}
print(teamScore)
//在if语句中,条件必须是一个布尔表达式——这意味着像if score { ... }这样的代码将报错,而不会隐形地与0做对比。你可以一起使用if和let来处理值缺失的情况。有些变量的值是可选的。一个可选的值可能是一个具体的值或者是nil,表示值缺失。在类型后面加一个问号来标记这个变量的值是可选的。
//可选的,等于说是双份,不赋值的时候它就是个nil注意?一定要紧跟着类型,中间不要留空格,否则会报错
varoptionString1 :String? ="Hello"
print(optionString1=nil)
varoptionString2 :String?//这时候它就是个nil
//练习
varoptionName :String? ="王云鹏"
vargreeting ="hello"
ifletname =optionName{//这时候name有值了,表示条件为真啊
greeting="hello,\(greeting)"
}
//练习把optionalName改成nil,greeting会是什么?添加一个else语句,当optionalName是nil时给greeting赋一个不同的值。
varoptionName1 :String?
vargreeting1 ="hello"
ifletname1 =optionName1{//无值。缺省为Nil
greeting="hello,\(greeting1)"
}else{
greeting="hello,\(greeting1)"
}
//switch貌似OC里面的switch只能比较各整型好像swift里面的switch支持任意类型的数据以及各种比较操作——不仅仅是整数以及测试相等。
letvegetable ="red papper"
switchvegetable{
case"red":
print("匹配错误")
case"paper":
print("照样匹配错误")
case"red papper":
print("匹配正确")//匹配到的是这个
default:
print("匹配的乱七八糟")
}
//Tips:运行switch中匹配到的子句之后,程序会退出switch语句,并不会继续向下运行,所以不需要在每个子句结尾写break。
//你可以使用for-in来遍历字典,需要两个变量来表示每个键值对。字典是一个无序的集合,所以他们的键和值以任意顺序迭代结束。
varfunStrings = ["key1":["我的","毛的"],"key2":["它的","她的","他的"],"key3":["你的","那个人的"]]
//快速枚举
for(key,content)infunStrings{
ifkey =="key1"{//判断两个字符串是否相等。直接这样等号判断对么??
print(content)
}elseifcontent.count==3{
print(key)
}
}
//使用while来重复运行一段代码直到不满足条件。循环条件可以在开头也可以在结尾。
varn =0
varsum =0
whilen<100{
n+=1
sum+=n
}
print(sum)
//for循环你可以在循环中使用..<来表示范围,也可以使用传统的写法,两者是等价的:
varn1 =0
forvari=0;i<5;++i{
n1+= i
}
print(n1)
varn2 =0
forqin0..<5{
n2+= q
}
print(n2)
/**
*函数和闭包使用func来声明一个函数,使用名字和参数来调用函数。使用->来指定函数返回值。
*无论是形参还是返回值,都是返回的变量名后面是冒号+类型
*/
//声明函数
funcgreet(name:String,content:String) ->String{
return"Hello,\(name+content)"
}
//调用
varreturnValue:String=greet("王云鹏","给您请安了")
print(returnValue)
//使用元组来让一个函数返回多个值。该元组的元素可以用名称或数字来表示。
//[Int]这样表示传进去实参是个数组,只不过是个整型的,字符串型的自己琢磨
funccalculateStatistics(scores:[Int]) ->(min:Int,max:Int,sum:Int){
varmin = scores[0]
varmax = scores[0]
varsum =0
forscoreinscores {
ifscore > max {
max = score
}elseifscore < min {
min = score
}
sum += score
}
return(min, max, sum)
}
varitems =calculateStatistics([12,13,45,9,10])
print(items.sum)
print(items.2)
//函数可以带有可变个数的参数,这些参数在函数内表现为数组的形式:
funcmaybeChange(values:Int...) ->Int{
varsum =0
forvalueinvalues{
sum += value
}
returnsum
}
maybeChange()
maybeChange(21,23,57)
//练习练习:写一个计算参数平均值的函数。
funcgetAverage(numbers:[Int]) ->Float{
varaverage =0
varsum =0
fornumberinnumbers{
sum += number
}
returnFloat(sum) /Float(numbers.count)
}
getAverage([1,2,3,4,5,6])