/**
*? 1、簡單值的計算與轉換
*/
//無需指定值的類型(賦值的時候系統會自動識別)
let integer1 = 10
let double2 = 10.0
//同時聲明三個相同類型的變量,每個變量之間用都好隔開,并在最后加上所屬類型
var value1, value2, value3:Double
//值的類型定義
let float3:Float = 30;
print("1、float:",float3," is that right");
//值轉字符串
let label = "this is a label"
let labelLength = 40
let labelString = label + String(labelLength)
print("1、"+labelString)
//字符串與字符串拼接
let appleCount = 10
let orangeCount = 4
let totalCountStr = "I have \(appleCount + orangeCount) fruits"
print("1、===asdflkj",totalCountStr + ",hah","aaaaaa===")
//還有
print("1、===asdflkj \(totalCountStr),hah,aaaaaa===")
//創建數組和字典
var hahArray = ["hah1","hah2","hah3"]
print(hahArray[2])
var hahDictionary = [
"hah1":"h",
"hah2":"a",
"hah3":"h"
]
hahDictionary["hah4"] = "yeah"
print("1、",hahDictionary["hah2"])
//創建一個空數組和字典
//指定類型的數組
let emptyArray = [String]()
let emptyDictionary = [String:Float]()
//如果數組和字典的類型能夠識別出,不指定類型也行
let emptyArray1 = []
let emptyDictionary1 = [:]
print("==========華麗的分割線=========")
/**
*? 2、控制流:if / switch / for-in / for / while / repeat-while
*/
/********** if *******************/
//實現計算并輸出一個數組中大于50的元素個數,語法如下
let tempArray = [10,59,30,23,58,100]
var count = 0
for score in tempArray{
if score > 50{
count += 1
}
}
print("2、count:", count)
//swift中不會自動將 值 與 0 做比較,也就是說不能使用 if socore{...} 這樣的語法,否則會報錯;判斷值是否為空時,在類型后面加一個問號,標記這個變量的值是可選的,同時與nil做比較
var optionalString:String? = "Hello"
print("2、is that optionalString? existed?",optionalString != nil)
//通常是將if與let一起使用,一個可選值可以是一個具體值也可以是nil,如果變量的可選值為nil,let name = optionalString2? 判斷結果為false,如果不是nil,會將optionalString2的值賦值給name
var optionalString2:String? = "APPLE"http://變量可選值
//var optionalString2:String? = nil
var greeting = "Hello"
if let name = optionalString2{
greeting = "Hello,\(name)"
}else{
greeting = "HAH"
}
print("2、if",greeting)
/********* switch **************/
//switch支持任意類型的數據比較,如String,Integer;switch匹配到相應的case后會自動退出switch語句,并不會繼續向下運行,因此可以省略break
let string = "apple"
var tempString = ""
switch string{
case "apple":
tempString = "a"
case "p":
tempString = "p"
case "l":
tempString = "l"
default:
tempString = "APPLE"
}
print("2、switch",tempString)
/******* for-in ***********/
//使用for-in遍歷字典,語法為:for(key,value)in dictionary{...},括號中的key和value為自己聲明的keyName和valueName,可不與dictionary中的key和value同名
let dictionaryArray = [
"array1":[1,2,3,4],
"array2":[5,6,9,8],
"array3":[10,9,8,7]
]
var largest = 0
var largestKey = "key"
for(arrayName,numberArray) in dictionaryArray{
for number in numberArray{
if number > largest{
largestKey = arrayName
largest = number
}
}
}
print("2、for-in:largest number is",largest," largest keyName is",largestKey)
//在 for 循環中使用 ..< 來表示范圍,也可以用傳統的寫法;是使用..<創建的范圍不包含上界,包含上界的寫法:...<
var runLoopCount = 0
for i in 0..<4{
runLoopCount += 1
}
print("2、for 使用 ..< 表示范圍:",runLoopCount)
var run2 = 0
for var j = 0; j < 4; ++j{
run2 += 1
}
print("2、使用常規for循環:",run2)
/******** while **********/
//while的語法和oc相似
var n = 2
while n < 50{
n = n * 2
}
print("2、while",n)
/**
*? 函數和閉包
*/
//用 func 聲明一個函數 ,語法: func 方法名(參數名1:參數類型,參數名2:參數類型,) -> 返回值類型{...} 從第二個內部方法名開始必須寫上,否則會報錯,如果想要讓第一個方法名也必須寫,只需要 func greet(name name:String,day:String)->Sring{...}
func greet(name:String,day:String) -> String{
return "Hello \(name),today is \(day)day"
}
print("3、函數聲明:\( greet("hah",day: "sunny ") ) ===")
//swift中的函數可以通過使用 “元組” 返回多個值,該元組可以用名稱或者數字表示
func hahFunctionName(scores:[Int]) -> (min:Int, max:Int, sum:Int){
var max = scores[0]
var min = scores[0]
var sum = 0
for score in scores{
sum += score
if score > max{
max = score
}
if score < min{
min = score
}
}
return(min,max,sum)
}
let returnValue = hahFunctionName([2,3,4,5]);
print("3、返回多個值: 最大值\(returnValue.max)或者\(returnValue.1) 最小值\(returnValue.min)或者\(returnValue.0) 總和\(returnValue.sum)或者\(returnValue.2)")
//函數能嵌套,能作為另一個參數的返回值,也能作為參數
//1、嵌套,傳入的參數帶有可變參數的時候用Int...表示(Int為參數類型)
func method1(number1:Int...)->Int{
var sum = 0
func add(){
for num in number1{
sum += num
}
}
add()
return sum
}
method1(3,5)
//2、函數作為返回值,returnFunc()->(Int->Stirng)中的Int為方法里面的int2String的參數類型,String為最終返回的類型,第一個方法和里面的第二個方法的最終返回類型需保持一致
func returnFunc() -> (Int->String){
func int2String(num:Int) -> String{
return " change to \(num) string"
}
return int2String
}
var intNum = returnFunc()//返回值為int2String(),因此intNum = int2String
intNum(3)
//多個返回值情況
func returnFunc2() -> ((Int,String)->(Int,String)){
func int2String(num:Int,string: String) ->(Int,String){
return? (num,"change to \(num) string")
}
return int2String
}
var intNum2 = returnFunc2()//返回值為int2String(),因此intNum2 = int2String
var intAndString = intNum2(3,"hah")
intAndString.1
//函數作為參數的情況
func matchGame(nums:[Int], condition:Int -> Bool) -> Bool{
for items in nums{
if condition(items){
return true
}
}
return false
}
func moreThanTen(num:Int)->Bool{
return num > 10
}
matchGame([3,25,6,23,14], condition: moreThanTen)
func matchCount(nums:[Int], condition:Int -> Bool) -> Int{
var count = 0
for items in nums{
if condition(items){
count += 1
}
}
return count
}
func moreThanFive(num:Int)->Bool{
return num > 5
}
matchCount([3,25,6,23,14], condition: moreThanFive)