//: Playground - noun: a place where people can play
import UIKit
/**
* Swift 2.0以前
* print
* println
* Swift 2.0 以后合体了
* print
*/
print("Hello,Swift")
// 1.常量和变量.
let a = 10 // 程序运行期间,不能修改的量.
var b = 20 // 程序运行期间,可以修改的量.
/**
* 命名规则.
* 1. 可以由数字 字母 下划线 组成
* 2. 不能以数字开头.
* 3. 全面支持Unicode(可以用中文 表情等)
*/
let 😹 = 20
var 😻 = 30
😻 + 😹
let 硬件 = 90
let 软件 = 100
let 电脑 = 硬件 * 软件
// 一:数据类型(会根据后面类型自己判断变量的类型)
// 1.
//(1) 整型 Int Int8 Int16 Int32 Int64
let firstNumber: Int = 20
let number: Int8 = 20
Int.max // 和当前CPU的大小有关.
Int.min
Int8.max
Int8.min
Int16.max
Int16.min
INT64_MAX
Int64.min
// (2)无符号整型 UInt UInt8 UInt16 UInt32 UInt64
UInt.max
UInt.min
// 2.(带小数点的默认为Double类型)
// (1)Float 7位
let firstFloat: Float = 0.1231212121554454515
let secendFloat = 0.2
// (2)Double 16 位
let firstDouble: Double = 0.452165646415415454545454666666
let secendDouble = 0.5
// Swift中在运算时,有严格的类型匹配.
// 如果类型不匹配时,需要进行类型强转.
Double(firstFloat) + firstDouble
// 3.字符和字符串.
// (1)字符 Character
let char: Character = "a"
// (2)字符串 String
var firstString: String = "无语"
let secendString: String = "对你"
secendString + firstString + String(char) // 字符串拼接.
firstString += secendString
firstString += "\(硬件)" // "\()"插入运算符.
let ThirdString = "ddDdDd"
ThirdString.uppercaseString // 字符串大写.
ThirdString.lowercaseString // 字符串小写.
ThirdString.characters.count // 获取字符串长度,能返回一个装着字符的数组.
// 4.数组.Array
// Array<元素类型> 或者 [元素类型]
let firstArray: Array<Int> = Array<Int>()
let FourArray: [Int] = [Int]()
var secendArray = [10, 20, "ab", 50]
print(secendArray)
let ThirdArray = [12, "a", 32, secendString]
// 数组添加元素
secendArray.append(30)
secendArray.append("sewew")
secendArray += ["真的"]
secendArray.removeFirst(3) // 从一个开始删到第几个.
secendArray.removeAtIndex(2) //
secendArray.removeFirst() // 删的第一位是哪个数
print(secendArray)
// map 映射 将数组中的值,映射成另外一种类型(类似字符串的万能公式)
let array = [10, 30, 40, 50, 60]
let arr = array.map({"多少\($0)元"}) // $0 表示遍历时每次代替的元素.(应用:如时间戳)
arr
// 筛选 值 > 30 的
let arr1 = array.filter({$0 > 30})
arr1
// 5. 元组
// 1. 元组定义
// (1)元组可以有多个参数.
// (2)参数没有词修饰,用" . "下标去取值.
// (3)有词修饰,可以用" . "或" 词 "取值 .
// 2. 元组的应用.
// (1)可以同时给多个变量赋值()
// (2)函数有多个返回值.
let def = (name:"傻×", age:20, count:100.0)
def.name
def.age
def.count
let abc = ("傻nouou", 19, 200.0)
abc.0
abc.2
abc.1
let(name, age, count) = abc
name
age
count
let arrayYuanzu = [10, 30, 40, 50, 60]
let arryuanzu = arrayYuanzu.map({"多少\($0)元"}) // $0 表示遍历时每次代替的元素.(应用:如时间戳)
print(arr)
// 6. Bool类型
// true false
let str = "玉皇大帝"
let string = "王母娘娘"
str == string
// 7. 字典(无序)
let dic:Dictionary<String, String> = Dictionary<String, String>()
var dictionary = ["name":"小刘","age":"28"]
dictionary["name"]
let index = dictionary.indexForKey("name")
dictionary.removeAtIndex(index!)
dictionary
// 可以有取值范围
// 0...2 0 <= x <= 2 [ 0, 2 ]
// 0.. <2 0 <= x < 2 [0, 2]
array[0...2]
// 二: 分支语句
// 1. if... else
if str == string {
print("成立")
}else {
print("不成立")
}
// 2. switch fallthrough穿过
let i = 20
switch i {
case 0...20 where i > 20:
print("是20")
fallthrough // 加它会继续往下走
case 30:
print("是30")
// 无fallthrough 直接跳出,默认加了break.
default:
print("嘿嘿")
}
// switch 可以传字符串,不再局限于整型表达式.
switch "小明" {
case "小明":
print("heheda")
case "小智":
print("xxxxxxx")
default:
print("++++")
}
// 三: 循环.
// 1.while
var num = 0
while num < 100 {
num++
}
// 2. do...while Swift2.0以前的写法.
// repeat...while Swift2.0以后.
repeat {
num++
}while num < 100
// 3. for
for var num = 0; num < 100; num++ {
num++
}
for num in 0..<100 {
print(num)
}
// 四:函数
// func 函数名(参数列表) ->返回值类型 {函数体}
// _ 对外隐藏自己的外部参数.
// 函数默认第一个参数加了_
// Swift2.0以前,#number1 以本身作为外部参数.
// 2.0以后,默认的参数列表中第一个元素隐藏外部参数
// 需要在第一个参数前给它起外部参数.
// 参数如果默认给初值,在函数调用时,可以忽略.
func sayHi() {
print("hehele")
}
sayHi()
// 有参有返回值
func sumNumber(num1
num1:Int, _ num2:Int, num3: Int = 0) ->Int {
return num1 + num2 + num3
}
sumNumber(num1: 20, 20)
sumNumber(num1: 20, 20, num3: 1)
// 有参无返回值
func printString (string:String) {
print(string)
}
// 无参无返回值
func sayNo() {
print("hehe")
}
// 无参有返回值
func sayHopy() ->String {
let xiaoming: String = "小明"
return xiaoming
}
// 有参多返回值.
func haveMoreReturn (more:String) ->(name:String,age:Int) {
return (name,age)
}
// 多相同参数列表可以忽略为...
func sumAllNumber (number:Int...) ->Int {
var sum = 0
for num in number {
sum += num
}
return sum
}
sumAllNumber(1, 2, 4, 54, 65, 454)
// 无参多返回值.
func noHaveMoreReturn () ->(String,Int) {
return (name,age)
}
// 交换两个变量的值. inout
var num1 = 20
var num2 = 30
func exchangeNumber ( inout number1: Int, inout _ number2: Int) {
// let temp = number1
// number1 = number2
// number2 = temp
// 通过元组交换两个变量的值.
(number1, number2) = (number2, number1)
}
exchangeNumber(&num1, &num2)
num1
var str1 = "学成"
var str2 = "啸天"
// T 代表任意类型 泛型(还可以用U,同样也只泛型,U指另外一种泛型)
func exchangeAnyObject<T> ( inout number1: T, inout _ number2: T) {
// let temp = number1
// number1 = number2
// number2 = temp
// 通过元组交换两个变量的值.
(str1, str2) = (str2, str1)
}
exchangeAnyObject(&num1, &num2)
str1
网友评论