Swift基础语法(一)

OCSwift快速教程(基础篇)

1.常量变量篇

定义一个常量

let a : Int = 10

定义一个变量

var b : Int = 20

b = 30

常量不能被修改,变量可以被修改


常量不可被修改的真实含义是指针不可以再指向其他对象,但是可以通过指针获取这个对象,然后修改其中的属性

比如

let view : UIView = UIView(frame: CGRect(x: 10, y: 10, width: 50, height: 50))

view.backgroundColor = UIColor.red


在真实使用过程中,建议先定义常量,如果需要修改再修改为变量(更加安全)


2.Swift中的数据类型

Int Double Float等等这些类型不用说了,那什么有符号无符号整型什么的都无所谓,玛德,搞这么多麻烦的东西,看着头疼,不适合快速转型


let e : Int = 10 //感觉一个Int基本搞定一切

var f : Double = 3.14



类型推导:Swift可以自动进行类型推导,根据后面的数值自动去推导前面变量或者常量的类型,比如

let c = 10

var g = 20.5

按住option+左键,可以自动知道前面变量的类型


Swift中没有隐式转换,相同类型之间的数值才能进行运算,所以牵扯到一个强转的问题

比如:

let h = 20

let i = 10.4

let j = Double(h) + I //这里必须强转


3.Swiftifswitchguard逻辑分支

3.1做判断必须有明确的类型,可以不加()

if h {

    print("哈哈")

}

的时代已经过去

现在的写法是

if h>10 {       //必须明确指定真假

    print("哈哈")

}

3.2switch分支

Switchcase下不加break,会自动在后面加上

let l = 0

switch l {

case 0:

    print("")

default:

    print("")

}

所以如果非要使用case穿透的话就

let sex = 0

switch sex {

case 0:

    print("哈哈")

    fallthrough

case 1:

    print("正常人")

default:

    print("其他")

}


3.3switch的区间判断

let score = 88


switch score {

case 0..<60:

    print("不及格")

case 60..<80:

    print("几个")

case 80..<90:

    print("良好")

case 90..<100:

    print("优秀")

default:

    print("满分")

}

开区间:0..<10 表示0-9,不包括10

闭区间:0...10 表示0-10, 包括10

3.4三目运算符

let k = c > h ? c : h  //注意这里类型要一致,否则要强转

3.5 guard

Swift2.0后出现的语句,如果非真则走else里的代码,提高程序的可读性

var m = 10

func haha(m : Int) -> Int{

    guard m>=10 else {

        print("哈哈")

        return m

    }

    print("呵呵")

    return m + 1

}

let n = haha(m: m)

n11

为什么是提高程序的可读性?

看这段代码

let s = 87


if s < 60 {

    print(“1”)

} else if s <= 70 {

    print(“2”)

} else if s <= 80 {

    print(“3”)

} else if s <= 90 {

    print(“4”)

} else {

    print(“5”)

}

这么多if...else的嵌套,看起来的话比较麻烦,如果用guard就可以提高可读性,在s=60的时候。。。s=70的时候。。。


4.循环

4.1 for循环的写法

for i in 0 ..< 10 {

    print(i)

}

也就是for (i=0 i<10 i++){

}


特殊写法

如果在for循环中不需要用到下标i

for _ in 0..<10{

}


while循环

var a = 0

while a<10 {

    a+=1

}


do…while循环,swift中使用repeat代替了do

var b = 0

repeat {

    b+=1

}while b<10


5.字符串

Swift中使用String而非OC中的NSString

原因:

         1.因为String是一个结构体,性能更高

         2.NSString是一个OC对象,性能略差

         3.String支持直接遍历

         4.Swift提供了StringNSString之间的无缝转换


字符串的使用

let str1 = "hello"

let str2 = "world"

let str3 = str1+" "+str2   //拼接字符串


let name = "哈哈"

let age = 18

let message = name+":哎呦我已经\(age)岁了"


字符串的格式化

let min = 3

let second = 5

let time = String(format:"%02d:%02d",min,second)


6.数组


可变数组:必须初始化才能使用

var arr : [String] = [String]();

arr.append("哈哈")


不可变数组:

let arr1 : [String] = ["哎呦","不错"]


遍历

for i in 0..<array.count{

    print(array[i])

}

forin遍历

for k in array{

    print(k)

}


数组的合并

var arrays = ["fwerf","efwf","weweq"]

var array1 = ["dew","csf"]

var array2 = arrays + array1

一个数组中不要存放多种类型的数据


7.字典

初始化:

     let dict = ["name" : "why", "age" : 18] //不可变字典


     var dict2 : [String:AnyObject] = [String AnyObject]()//定义一个可变字典,AnyObject就相当于OC中的NSObject

    

    var dict1 : Dictionary<Int,String> //注意逗号

    dict1 = [1:"haha",2:"嘿嘿"];


 字典的合并

    var dict2 = ["name":"aiyou","age":18] as [String : Any]

    var dict3 = ["height":1.80] as [String : Any]

    for (key,value) in dict3 {

           dict2[key] = dict3[key]

    }

    print(dict2)

8.元祖

我感觉类似于数组和字典,元祖中的每一个数据叫做元素


普通写法:

let err = (404,"没找到")

print(err.0) //表示获取元祖中的第一个元素,其他的不用说了吧


起别名的方式:

let err1 = (errCode : 404,status : "没找到")

print(err1.errCode)


let (errCode,status) = (404,"没找到")

print(errCode)


9.可选类型:Swift中的可选类型是个比较难理解,这个在第二篇中再提


10.函数

注:在OC中是没有函数这个概念的,OC中的是方法,OC中准确的叫做消息转发,然后运行时调用底层C的函数


10.1 内部参数:函数的内部可以看到的参数就是函数的内部参数,就相当于参数列表。

外部参数:函数的外部可以看到的参数,例如:

       

   func ride(h num1 : Int, a num2 : Int, b num3 : Int) -> Int {

    return num1 * num2 * num3

   }

   var result1 = ride(h: 20, a: 4, b: 5)

这里的h,a,b调用的时候函数的外部参数


10.2 函数如果没有传递任何参数,可以使用默认参数

func makecoffee(type :String = "卡布奇诺") -> String {

    return "制作一杯\(type)咖啡。"

}

let coffee2 = makecoffee()

let coffee3 = makecoffee(type: "拿铁")


10.3 Swift中函数的参数个数可以变化,不确定有多少个参数的情况下可以使用()的方式

func sum(numbers:Double...) -> Double {

    var total: Double = 0

    for number in numbers {

        total += number

    }

    return total

}

sum(numbers: 100.0, 20, 30)

sum(numbers: 30, 80)


10.4 函数中默认是值传递,地址传递

func swap1( a : inout String, b : inout String) {

    let temp = a

    a = b

    b = temp

    

    print("a:\(a), b:\(b)")

}

var aa = "哎呦"

var bb = "呵呵"

swap1(a: &aa, b: &bb)

交换了两个单词的地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值