直接上代码:
// 运算符@H_301_5@
// 一元运算符@H_301_5@
// 1、负号运算符@H_301_5@
var@H_301_5@ number1 = 10.0@H_301_5@
var@H_301_5@ number2 = -number1
println@H_301_5@((number2))
// 2、正号运算符@H_301_5@
// 正号运算不做任何操作@H_301_5@
var@H_301_5@ number3 = +number2
println@H_301_5@((number3))
// eg:b = a++ 相当于 a 先赋值再完成自增,而 b = ++a 相当于 a 先完成自增,再去赋值@H_301_5@
var@H_301_5@ number4 = number1++
number4++
println@H_301_5@((number4))
number4--
println@H_301_5@((number4))
// 二元运算符@H_301_5@
// 1、赋值运算符@H_301_5@
// 1.1 在 swift 当中,赋值语句没有任何返回值,不可以跟 if - else 相结合@H_301_5@
let a:Double = 1.0@H_301_5@
// 2、算术运算符@H_301_5@
// 2.1、取余运算符@H_301_5@
// 在 swift 当中,与 C 语言中的取余运算符有些不同,swift 中的取余运算符的左右两侧可以为小数,这也是 swift 有所改进的地方@H_301_5@
var@H_301_5@ quyuNumber = 10.0@H_301_5@ % 3.0@H_301_5@
println@H_301_5@((quyuNumber))
// 3、组合赋值运算符@H_301_5@
var@H_301_5@ zuheNumber = 10@H_301_5@
zuheNumber += 10@H_301_5@
println@H_301_5@((zuheNumber))
// 4、比较运算符@H_301_5@
// 5、逻辑运算符@H_301_5@
// 6、区间运算符 <<<<<< swift 新增的运算符@H_301_5@
let aa = 1@H_301_5@
let bb = 5@H_301_5@
// 6.1、全闭区间@H_301_5@
for@H_301_5@ qujianNumber in aa...bb {
println@H_301_5@((qujianNumber))
}
// 6.2、半开半闭@H_301_5@ 15@H_301_5@..<25@H_301_5@
for@H_301_5@ qujianNumber2 in 15@H_301_5@ ..< 25@H_301_5@ {
println@H_301_5@((qujianNumber2))
}
// 7、空合运算符 <<<<<< swift 新增的运算符@H_301_5@
// 7.1 空合运算符 ?? 前面必须是可选类型的@H_301_5@
// 7.2 空合运算符 ?? 前后的类型必须一致@H_301_5@
// ! 表示这个变量是可选类型的,但是这个变量是一定有值的@H_301_5@
// ? 表示这个变量是可选类型的,但是这个变量不一定有值的@H_301_5@
var@H_301_5@ optionalNumber:Int! = 10@H_301_5@
println@H_301_5@(optionalNumber!)
// ?? 如果 optionalNumber 不为 空 则返回 optionalNumber的值;如果 optionalNumber 为 空,则返回 ??后面的值。@H_301_5@
let kongheNumber = optionalNumber ?? 20@H_301_5@
println@H_301_5@((kongheNumber))
// 三元运算符@H_301_5@
// 形式结构:a > b ? a : b@H_301_5@
// 字符串@H_301_5@
// 1、字符串的字面量 eg:"cacavca"字面量@H_301_5@
var@H_301_5@ string1 = "cacavca"@H_301_5@
var@H_301_5@ string2 = "wang"@H_301_5@ + "zhen"@H_301_5@ + "gang"@H_301_5@
println@H_301_5@((string1))
println@H_301_5@((string2))
// 转义字符,类比 C 语言eg,\t \n \` \``@H_301_5@
var@H_301_5@ string3 = "\"wang\""@H_301_5@ /// 加 双引号@H_301_5@
println@H_301_5@(string3)
var@H_301_5@ string4 = "\'zhengang\'"@H_301_5@ /// 加 单引号@H_301_5@
println@H_301_5@(string4)
// 2、swift 中的字符串和 OC 中的字符串的区别@H_301_5@
// 2.1、 没有可变类型和不可变类型之分,在 swift 中,字符串到底可变不可变,取决于声明变量的类型,如果定义的是 let 就是不可变,假如定义的是 var 就是可变@H_301_5@
// 2.2、 swift 中的字符串是值类型,而 OC 当中,不加特殊声明的话是引用类型。不用担心内存问题,swift 已经做了优化。@H_301_5@
var@H_301_5@ appendingStr1 = "wangzhigang"@H_301_5@
var@H_301_5@ appendingStr2 = appendingStr1
appendingStr2 += "shuai"@H_301_5@
println@H_301_5@((appendingStr1))
println@H_301_5@((appendingStr2))
// 2.3、 swift 中 String 类型 和 OC 中 NSString 做了完美的对接,换句话说,就是 swiftString 可以使用 NSString 的方法。@H_301_5@
// 字符串的初始化@H_301_5@
var@H_301_5@ initString:String = String(appendingStr1 + "age"@H_301_5@)
println@H_301_5@((initString))
// 字符串拼接,+ 可以进行字符串拼接,注意要拼接的变量必须是可变的。@H_301_5@
initString += "hgkehg"@H_301_5@
//initString.append("c")@H_301_5@
println@H_301_5@((initString))
// 字符串进行大小写转换@H_301_5@
var@H_301_5@ changeString1 = "good boys"@H_301_5@
// 改成大写@H_301_5@
var@H_301_5@ changeString2 = changeString1.uppercaseString
println@H_301_5@((changeString2))
// 改成小写@H_301_5@
println@H_301_5@((changeString2.lowercaseString))
// 首字母大写@H_301_5@
println@H_301_5@((changeString2.capitalizedString))
// 字符串插值@H_301_5@
// 在 swift 输出语句中没有格式化占位符,想要实现这样的效果,我们要用到字符串插值格式 :"\()"@H_301_5@
var@H_301_5@ insertNumber = 18@H_301_5@
println@H_301_5@("insertNumber = \(insertNumber)"@H_301_5@)
// swift 中的集合@H_301_5@
// 1、数组@H_301_5@
// 2、字典@H_301_5@
// 3、set (了解)@H_301_5@
// 区别:@H_301_5@
// 1、在 swift 中的集合类也都是值类型,而 OC 当中的是引用类型;@H_301_5@
// 2、在 swift 中,也是使用引用计数的概念来管理内存的,但是引用计数只适用于对象类型,值类型不需要管理;@H_301_5@
// 3、swift 中,引用计数管理内存的方法与 OC 当中引用计数管理内存的方法,还是不同的,(见后面内容);@H_301_5@
// 4、在 swift 中数组是可以存放任意类型,但是 OC 中,只能存放对象类型。@H_301_5@
// 1、 Array@H_301_5@
// 1.1、 swift 中,Array 也没有可变和不可变之分。而是取决于用什么关键字类修饰, var 就是可变的 , let 就是不可变的@H_301_5@
// 1.2、 使用字面量来为一个数组赋值@H_301_5@
// 当我们实现声明数组中元素的类型,内部的元素类型必须一致@H_301_5@
var@H_301_5@ array = ["wang"@H_301_5@,"zhen"@H_301_5@, 9@H_301_5@]
println@H_301_5@((array))
// 数组增加元素@H_301_5@
// 1、调用 append 方法,当我们调用 append 方法进行元素添加时,是添加到数组最后面。@H_301_5@
array.append@H_301_5@("wang"@H_301_5@)
println@H_301_5@((array))
// 2、调用 += 添加元素@H_301_5@
array += ["wzg1"@H_301_5@,"wzg2"@H_301_5@]
println@H_301_5@((array))
// 3、调用 insert 方法,把元素插入到指定位置@H_301_5@
array.insert("wzg3"@H_301_5@,atIndex: 0@H_301_5@)
println@H_301_5@((array))
// 4、数组删除元素@H_301_5@
// 调用 removeAtIndex 方法进行删除@H_301_5@
array.removeAtIndex(0@H_301_5@)
println@H_301_5@(array)
// 5、改变数组中的元素@H_301_5@
// 1、通过下标来更改元素@H_301_5@
array[0@H_301_5@] = "youmo"@H_301_5@
println@H_301_5@(array)
// 2、利用下面的方法,不及可以修改,而且可以删除元素。@H_301_5@
array[0@H_301_5@...3@H_301_5@] = ["1"@H_301_5@,"2"@H_301_5@,"3"@H_301_5@]
println@H_301_5@(array)
// 6、数组查询@H_301_5@
// 利用 for-in 来进行数组遍历@H_301_5@
for@H_301_5@ value in array {
println@H_301_5@("value = \(value)"@H_301_5@)
}
// 使用全局 enumerate 函数返回一个由每一个数据项索引值和数据值组成的元组@H_301_5@
for@H_301_5@ (index,value) in enumerate(array) {
println@H_301_5@("\(index):\(value)"@H_301_5@)
}
// 数组的初始化,声明存储固定类型的数组@H_301_5@
// 1、@H_301_5@
var@H_301_5@ initArray1:[String] = [String]() // 完成写法@H_301_5@
var@H_301_5@ initArray2:[String] = [String](count: 3@H_301_5@,repeatedValue: "wang"@H_301_5@)
println@H_301_5@(initArray2)
// 2、@H_301_5@
var@H_301_5@ initArray3:Array<String> = Array(count: 4@H_301_5@,repeatedValue: "zhen"@H_301_5@)
println@H_301_5@((initArray3))
// 3、使用构造方法创建的是由一个特定数据类型构成的数组@H_301_5@
// 字典@H_301_5@
// 1、使用字面量来给字典进行赋值@H_301_5@
var@H_301_5@ dictionary = ["boy"@H_301_5@:"wang"@H_301_5@,"age"@H_301_5@:"12"@H_301_5@,"gender"@H_301_5@:"man"@H_301_5@]
println@H_301_5@(dictionary)
println@H_301_5@(dictionary["age"@H_301_5@])
// 增@H_301_5@
// 使用下标增加键值对@H_301_5@
dictionary["girl"@H_301_5@] = "shiyingying"@H_301_5@
println@H_301_5@((dictionary))
// 删@H_301_5@
// 调用 removeValueForKey 方法进行删除@H_301_5@
dictionary.removeValueForKey("age"@H_301_5@)
println@H_301_5@("delete : \(dictionary)"@H_301_5@)
// 改@H_301_5@
// 1、使用键,修改键对应的值@H_301_5@
dictionary["girl"@H_301_5@] = "liujingran"@H_301_5@
println@H_301_5@((dictionary))
// 2、使用 updateValue 方法进行修改@H_301_5@
// updateValue 方法可以进行修改,也可以进行添加键值对,当填入的键存在时,就会进行数据更新,把键对应的老值返回出来,当键不存在时,就会进行添加,返回是 nil 。@H_301_5@
let returnValue = dictionary.updateValue("18"@H_301_5@,forKey: "age"@H_301_5@)
println@H_301_5@("returnValue = \(returnValue),dictionary = \(dictionary)"@H_301_5@)
let returnValue2 = dictionary.updateValue("19"@H_301_5@,forKey: "class"@H_301_5@)
println@H_301_5@("returnValue2 = \(returnValue2),dictionary = \(dictionary)"@H_301_5@)
// 查(遍历字典)@H_301_5@
for@H_301_5@ (key,value) in dictionary {
println@H_301_5@("key = \(key) value = \(value)"@H_301_5@)
}
// 字典初始化的方式也有两种@H_301_5@
// 使用字典初始化方式进行创建的是固定键值类型的字典@H_301_5@
// 1、@H_301_5@
var@H_301_5@ initDiction1 : [String : String] = [String : String]()
// 2、@H_301_5@
var@H_301_5@ initDiction2 : Dictionary<String,String> = Dictionary()
// 控制流@H_301_5@
// 1、for-in 循环@H_301_5@
for@H_301_5@ value in 1@H_301_5@...10@H_301_5@ {
println@H_301_5@(value)
}
// 当我们不需要使用区间的值的时候,我们可以使用‘_’告诉系统,相当于 while()@H_301_5@
for@H_301_5@ _ in 1@H_301_5@...10@H_301_5@ {
println@H_301_5@("wangzhengang"@H_301_5@)
}
// 2、for 循环@H_301_5@
for@H_301_5@ var@H_301_5@ index = 0@H_301_5@ ; index < 10@H_