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"//变量可选值

//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)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容