swift 基礎(一)簡單值轉換、控制流、函數基礎

/**

*? 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)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容