另附上.playground文件,可使用最新xcode打开运行
https://github.com/BlueStormLSS/swift
import UIKit
//基于swift5
//var可变 let不可变 ////?表示可能存在也可能不存在 !表示一定存在
//:后可不跟类型,会根据赋值自动给与类型
var varInt = 40
var varIntNil : Int
var varIntClass : Int = 40
let letInt = 30.0
let letIntClass : Double = 30.0
let letString : String? = nil
let letStrings : String! = nil
///字符串
let letString1 = "Hello"
let letString2 : String = " "
var varString1 = "World"
let letString3 = "\(letString1+letString2)world"
print(letString1+letString2+varString1)
print(letString3)
//遍历字符串
for c in letString1 {
print(c)
}
///数组
let letArray1 = [String]()//创建一个内容类型为String的空数组
let letArray2 : [Int] = [1,2,3]//创建一个内容类型为Int的数组
let letArray3 = [Int](repeating: 4, count: 6)//创建一个6个元素,并且都为Int类型,元素为4的数组
let letArray4 = ["one","two","three"]
var varArray1 = letArray4
//添加元素
varArray1.append("four")
print("letArray1 = \(letArray1)")
print("letArray2 = \(letArray2)")
print("letArray3 = \(letArray3)")
print("letArray4 = \(letArray4)")
print("varArray1 = \(varArray1)")
//合并数组
let letArray5 = letArray2+letArray3
print("letArray5 = \(letArray5)")
//添加元素
varArray1 += ["five"]
print("varArray1 = \(varArray1)")
//更改元素
varArray1[2] = "3"
print("varArray1 = \(varArray1)")
//计算个数
print("letArray5的元素个数为:\(letArray5.count)")
//判空
print("letArray5 是否为空:\(letArray5.isEmpty) letArray1 是否为空:\(letArray1.isEmpty)")
///遍历数组
for item in varArray1 {
print(item)
}
for (idx,item) in varArray1.enumerated() {
print("在idx = \(idx)位置上的元素为\(item)")
}
///字典
//以下内容不再用print打印,右侧可直接观察
var dictionary1 = [String:Int]()//创建key为String类型,value为Int类型的空字典
//如果有就修改,没有就添加
dictionary1.updateValue(1, forKey: "one")///此方法会返回旧的值
dictionary1.updateValue(2, forKey: "two")///此方法会返回旧的值
dictionary1.updateValue(3, forKey: "three")///此方法会返回旧的值
print(dictionary1)
//指定key修改
dictionary1["one"] = 11
//移除key-value
dictionary1.removeValue(forKey: "one")
//dictionary1.removeAll()
//获取所有key
print("\(dictionary1.keys)")
//获取所有value
print("\(dictionary1.values)")
//个数
print("键值对个数:\(dictionary1.count)")
//是否为空
print("是否为空:\(dictionary1.isEmpty)")
//遍历字典
for (key,value) in dictionary1 {
print("第一种遍历:key = \(key),value = \(value)")
}
for (key,value) in dictionary1.enumerated() {
print("第二种遍历:key = \(key),value = \(value)")
}
///函数和各种循环,条件语句
//函数下面有如何使用
//传入一个String,返回一个Int
func funcOne(str : String) -> (Int){
print(str)
return 5
}
//和funcOne啥区别呢 嘿嘿
func funcOnePlus(_ str : String) -> (Int){
return 4
}
//加法
func funcAdd(one : Int, two : Int) -> (Int){
return one+two
}
//返回一个元组 (后面是不对的)(元组 暂时理解为特殊的数组,数组是有序的,并且类型相同)
func funcParameter() -> (one : Int , two : String){
return (4,"string")
}
//无参无返回值
func funcNono() -> (){
print(funcParameter())
}
//进阶 函数套函数
func funcAddOne() -> Int{
var y = 10
//返回值为空时,返回值 ->() 可省略
func add(){
y += 5
}
add()
return y
}
//返回值为一个函数
func funcMake() -> ((Int) -> Int) {
//addOne的参数为 Int ,返回值是 Int,也就是 (Int) -> Int 结构
//funcMake 返回值是(Int) -> Int ,所以可以返回addOne 函数本身
func addOne(number : Int) -> Int {
return 1+number;
}
return addOne
}
//传参是一个函数
func funcParter(list:[Int] ,condition: (Int) -> Bool) -> Bool {
for item in list {
if condition(item) {
return true
}
}
return false
}
//传参的函数
func lessThan(number : Int) -> Bool {
return number < 13
}
let arrays = [4,6,8,10,1,3,7]
for (idx,item) in arrays.enumerated() {
if item == 4 {
let result1 = funcOne(str: "string")
let result2 = funcOnePlus("string")
print(funcAdd(one: result1, two: result2))
}else if item == 6{
funcNono()
}else if item == 8{
print(funcAddOne())
//funcMake 返回值为一个函数
let makeFunc = funcMake()
print(makeFunc(4))
//传参是一个函数
let numbers = [20,13,7,1]
let trueOrFalse = funcParter(list: numbers,condition: lessThan)
print(trueOrFalse)
}else{
switch item {
case 10:
print("当前循环次数:\(idx) 值为10")
case 1:
print("当前循环次数:\(idx) 值为11")
continue///swift swith不需要break,所以,如果想继续执行,需要加continue,另外
case 3:
print("当前循环次数:\(idx) 值为10")
default:
print("当前循环次数:\(idx) 就剩最后一个小7了")
}
}
}