import UIKit
// 解包:读取可选类型时,要先查看值是否为nil。这个过程叫解包
let str = "hello world"
print(str)
var varName = "hello swift"
varName = "马冲是天才!"
print(varName)
var myNumber : Int
var myFloat : Float
myNumber = 120183501007
myFloat = 25.0
//////////////////////////////////////////////////////////////////////////////
//////////////////////////// 数据类型的声明 ///////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// 数字和bool类型
var swiftFloat0 : Float
var swiftFloat1 : Float64
var swiftFloat2 : Float80
// 集合类型 数组(arrays)、字典(dictionarys)、集合(sets)
// 数组中可以存放任何类型元素 包括基础类型,结构体,和类
var hasPet : Bool
// 数组属于i敏感类型数据
// 一个int型的数组
//var arrayOfInts : Array<Int> // 简洁写法同下
var arrayOfInts : [Int]
// swift基础数据类型。int float character string
//var dic : Dictionary<String,String> // 简洁写法同下
var dic :[String : String]
// 集合 是一个无序的集合 值必须唯一并可被哈希
var noOrderSets : Set<Int>
//////////////////////////////////////////////////////////////////////////////
//////////////////////////// 字面量和角标 ///////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
var literal = "Hello playground" // Hello playground 为字面量
literal = "Hello swift"
let literal_Str = literal
// 在playground中添加两个字面量
let num = 2
let fmStation = 91.1
//////////////////////////// 数组和字典字面量 ///////////////////////////////////
let numberArray = [1,12,35]
let strDic = ["no1":13 , "no2": 17]
let strDic1 = [22:"haha" ,25:"马聪" , 26:"120183501007"]
/////////////////////// 通过角标访问数组元素 字典同理 //////////////////////////////
let getNumberArray = numberArray[2]
let getStrDic = strDic["no1"]
let getStrDic1 = strDic1[25]
//////////////////////////////////////////////////////////////////////////////
/////////////////////////////// 构造器 /////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
let emptyString = String()
let emptyArratOfInts = [Int]()
let emptySetOfFloats = Set<Float>()
// 有默认值的类型
let defaultNumber = Int()
let defaultBool = Bool() // 默认时 false
// 类型可以有多个构造器
let number = 42
// String的构造器可以接收Int作为参数 然后根据int的值创建字符串
let stringOfInt = String(number)
let createSet = Set([205,105,22])
let defaultFloat = Float()
let createOfFloat = Float(3.1415926)
// 类型推断
let easyPi = 3.14 // 推断为double
let floatFromDouble = Float(easyPi) // 推断为float
// 属性
let emptyStrings = "1234"
emptyStrings.isEmpty // 判断是否为空
emptyStrings.first
// 若要检查集合是否为空,请使用其“isEmpty”属性,而不是将“count”与零进行比较。
emptyStrings.underestimatedCount
emptyStrings.count
let countUp = ["one","one","three","four"]
let secondElemnet = countUp[1]
countUp.count
countUp.last
countUp.startIndex
countUp.endIndex
countUp.distance(from: 0, to: 3) // 不知道干啥的
var countingUp = countUp // 把字符串添加到数组末尾
countingUp.append("five")
//////////////////////////////////////////////////////////////////////////////
////////////////////// 可选 表示变量中可能没有值 /////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
var anOpeationFloat : Float?
var anOPeationArrayOfString : [String]?
var anOpeationArrayOpeationStrings : [String?]?
var reading11 : Float
var reading22 : Float
var reading33 : Float
var reading1 : Float?
var reading2 : Float?
var reading3 : Float?
// 可选类型的赋值和其他类型一样
// 解包:读取可选类型时,要先查看值是否为nil。这个过程叫解包
reading1 = 3.0
reading2 = 4.0
reading3 = 5.0
//////////////////////////////////////////////////////////////////////////
/////////////////// 解包分为强制解包 和 正常解包 /////////////////////////
// 下面展示强制解包 ***********
// 下面例子会报错。因为可选类型需要解包
//let avgreading = (reading1 + reading2 + reading3) / 3
// ********************** 强制解包存在潜在问题 , 相当于告诉编译器可选值肯定不为空,可以当作正常浮点数处理 ****************
// 如果把 “ reading3 = 5.0 ” 注释掉就会报错
//let avgreading1 = (reading1! + reading2! + reading3!) / 3
// 下面展示正常解包 ***********
if let r1 = reading1 ,
let r2 = reading2 ,
let r3 = reading3
{
let avgNum = (r1 + r2 + r3) / 3
}else{
let error = "仪器报告读数为nil"
}
//////////////////////////////////////////////////////////
/////////////////// 字典角标 /////////////////////////
let nameByParkingSpace = [13:"alice" , 17:"Bob"]
let space13Assigness : String? = nameByParkingSpace[13]
let space42Assigness : String? = nameByParkingSpace[42]
// 字典解包
if let space13Assigness = nameByParkingSpace[13] {
print("key 13 is assigned in the dictionary!")
}else{
print("解包失败!有空值!")
}
//////////////////////////////////////////////////////////
/////////////////// 循环和字符串v补全 //////////////////
// 0...3表示,从0到3包含3,如果是0..<3,是0到3但是不包含3
for i in 0..<3 {
print(i)
}
// 特殊写法
// 如果在for循环中不需要用到下标i
for _ in 0..<3 {
print("_ in 0..<3 <---->hello")
}
for str in countUp {
print(str)
}
let dict = ["a":1, "b":2, "c":3];
for (key,value) in dict {
print("key: \(key) value : \(value) ");
}
// 不论 i 和 string 如何调换 前面的形参都为索引值
for (i,string) in countingUp.enumerated() {
print("countingUp测试 ---->i:\(i) ,, string: \(string) ")
}
for item in countingUp.enumerated() {
print("idx =\(item)");
}
// 枚举输出
for (idx,item) in countingUp.enumerated() {
print("下标:\(idx) 值:\(item)")
}
//跨步遍历,这个是swift另外一个特性 stride跨步 ********
for idx in stride(from: 0, to: 10, by: 2) {
print("idx = \(idx)");
}
let rang = 0 ..< countingUp.count
for i in rang {
print(i)
}
// 枚举字典元素
for (index,dicName) in strDic1.enumerated() {
print("index:\(index)-----value\(dicName)")
}
//////////////////////////////////////////////////////////////////////////////
////////////////////////// 枚举和Switch ////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
网友评论