swift语言入门介绍


1.
OC 的gcd、runtime是开源的,UIKIT是闭源的;
WWDC会议有对语言的新特性的讲解,维持一周,现在主推Swift语言。
2.
所有的声明和实现都在同一个文件中;
没有.h和.m文件。
3.
整数默认类型是int long
小数默认类型是double
(oc中的CGFloat 是单精度的)
数据的类型是自动推导的,能根据 ’=’ 右边的数据来确定具体的数据类型;
不同类型的数据无法直接进行计算,不支持隐含形式转换。
let修饰的数据一经赋值就不可修改,不可变。
var修饰的变量可变。
推荐使用let,安全,等需要修改的时候再改成var。
示例:
    func demo1 () {
       
var a = 10
        a = 12
        let b:CGFloat = 11.1
        //  b = 13 // b的值不可改变
        let c = CGFloat(a) + b
       
print(c)
    }
4. 可选项 ?
fatal 致命的
unwrapping 强制解包
运算符需要加空格分开。
    func demo1() {
        /*
        ?表示可选类型,简单理解为有吗?” 有值就是具体类型的值,没有就是nil。
        打印可选项会带上 optaional。
         常报错:
        fatal error: unexpectedly found nil while unwrapping an Optional value
         格式:var a: Int?
        在使用强制解包的时候,可能会有风险。
                如下示例,一旦a的值为nil,强制解包就会报错。
        */
       
var a: Int? = 10
       
// 每使用‘!’ 都要思考是否安全?
        print(a!)
    }
5.分支结构
条件不用再写圆括号( )
大括号{ }不能省略
在swift语言中没有非零即真的概念,只有true 和false,好处是不用担心忘写非!
如:不用担心if(!dataList) 中忘写’!’。
6.if let 
if let 表示赋值,并且判断是否为空;
if let url = NSURL(string: string){
        let request = NSURLRequest(URL: url)
       
print(request)
    }
7.guard let … else
示例:
    func demo4(){
        let string = "http://www.baidu.com?username=zhang"
       
// guard let 可以减少嵌套,增强可读性
        guard let url = NSURL(string: string) else{
//            // 无法直接访问到url
//            print(url)
            return
        }
       
// 程序走到这里一定有值
        print(url)
    }
8. ?? 
所有可选项都不能直接参与运算。
    func demo5(){
       var a: Int? = 10
        // >>快速判断是否为空,并且设置默认值
        // 实际运用在获取数据源的个数,用的非常多
        // ??运算符优先级较低
        print((a ?? -1) + 11)
    }
9. switch 分支结构
    /*
    1. break
可以省略;
    2. case
的条件中,至少有一段可以执行的代码,否则报错
    3. case 中定义变量,不需要加 { }
    4. case 的类型可以是任意类型,在c中只能是整型数据
    5. case 可以同时case多个条件
    */

   
func demo6(){
       
let i = "100"
       
switch i {
       
case "100","120":
           
let str = "花花"
           
print("花无缺")
       
case "200":
           
print("小鱼儿")
       
default:
           
print("其他")
        }
    }
10.循环
    /*
   
仿OC循环
    1.
循环的条件可以省略()
    2.
递增的变量不能使用let
    */

   
func demo1(){
       
       
for var i = 0;i<10;i++ {
           
print(i)
        }
    }
    // swift循环,不包含10
    func demo2(){
       
for i in 0..<10{
           
print(i)
        }
    }
    // 循环 包含10
    func demo3(){
       
for i in 0...10{
           
print(i)
        }
    }
    // _表示忽略
    func demo4(){
       
for _ in 0..<10{
           
print("Hello World")
        }
    }
11. 字符串
    /*
        OC
中的 NSString 继承自 NSObject ,是一个对象,效率略低,不支持遍历
        SWIFT
中的 String是一个结构体,更加高效,支持遍历
    */

   
func demo1(){
       
let str = "花无缺"
       
for s in str.characters{
        
print(s)
        }
       
// NSUTF8StringEncoding 是取字符编码的长度,中文的字符编码长度是3
        let length = str.lengthOfBytesUsingEncoding(NSUTF8StringEncoding);
        print(length) // 打印结果是9
        let l = str.characters.count
       
print(l) // 打印结果是3
    }
    func demo2()
        let str1  = "你若安好"
       
let str2 = "便是晴天"
       
let str = str1 + str2
       
print(str)
       
print("\(str1)\(str2)")
       
       
let i:Int = 10
       
print("\(i)便是晴天")
       
let j:Int? = 10
       
print("\(j)便是晴天")
    }
   
/*
       
你若安好便是晴天
       
你若安好便是晴天
        10
便是晴天
        Optional(10)
便是晴天
    */
    // 字符串的比较
    func demo3(){
        let str1 = "ye"
       
let str2 = "liang"
        if str1 == str2{
            print("ai")
        }
else{
           
print("wo")
        }
    }
    // 字符串和range 截取字符串
    func demo4(){
       
// string 转换成NSString之后再去截取
        let s1 = "yuanlairuci"
       
let s2 = (s1 as NSString).substringWithRange(NSMakeRange(4, 3))
       
print(s2)
    }
========================

12.数组的基本操作
 func demo1() {
       
/*
        1.
数组中不建议存放不同类型的对象
        2.let
修饰的数组是不可变的
        3.
        */
        var arr = ["wo","ni","ta"]
        for str in arr{
           
print(str)
        }
       
// 向数组中添加元素
        arr.append("she")
       
print(arr)
       
// 修改元素
        arr[0] = "huawuque"
       
print(arr)
       
// 数组的删除
        arr.removeAtIndex(2)
       
print(arr)
        arr.
removeFirst()
       
print(arr)
        arr.
removeLast()
       
print(arr)
        arr.
removeAll()
       
print(arr)
    }

    // 数组的拼接
    func demo2() {
        let arr1 = ["ni"]
       
let arr2 = ["wo"]
       
let arr = arr1 + arr2
       
print(arr)
    }
13.字典的基本操作
    //[key : value]键值对
    func demo1() {
       
var dict = ["name":"fanbingbing","age":30]
       
//增加键值对
        dict["title"] = "女神"
       
// 根据key修改value
        dict["name"] = "linzhiling"
       
//删除
        dict.removeValueForKey("age")
       
print(dict)
       
// swift字典的遍历,for后面( )中的变量名无关;
//        for (key,value) in dict{
        for (a,b) in dict{
           
print("key = \(a)")
           
print("value = \(b)")
        }
    }
   
/*
   
打印结果:
    ["title":
女神, "name": linzhiling]
    key = title
    value =
女神
    key = name
    value = linzhiling
    */
14.函数
    /*
   
函数的基本格式
    func
函数名(参数名:参数类型) ->返回值类型
    */

   
func sum(a:Int, b:Int) ->Int{
       
return a+b
    }

    /*
   
引入函数的外部参数
   
能够让外界调用,对函数的语义更加清晰,在函数内部使用更加简洁
    */

   
func area(height a:Int, width b:Int) ->Int{
       
return a*b
    }
   
   
//函数没有返回值的三种写法
    func demo1(str: String) ->Void{
       
print(str)
    }
   
func demo2(str: String) ->(){
       
print(str)
    }
   
func demo3(str: String) {
       
print(str)
    }
15.
oc中的block什么情况下会造成循环引用,闭包,怎么解决的?
__unsafe的风险。
16.
block是提前准备好
__weak一般在调用层进行添加,不在工具类Tool类添加。
17.按ESC可以补全没写全的方法
18.闭包的特点:
19.
/*
block(闭包)的特点:
1.提前准备好的一段可以执行的代码
2.block
可以当做参数传递
3.在需要的时候执行block
4.block中使用 self 有可能产生循环引用
20.block理解
a. 闭包和block都是作回调用的。
b. block、闭包回调是通过参数来传值。
c. 闭包中访问自己的方法,必须要加self。
d. block访问self,会对外部变量copy。
e. __weak weak 修饰的对象当被系统回收的时候对象的地址会自动指向nilnil发送消息OC中是可以的不会造成野指针访问,iOS5.0推出。
f. __unsafe_unretained 相当于assgin关键字修饰对象当被回收时,对象地址不会指向nil,iOS 4.0推出。
g. MRC 开发下最常见错误之一坏内存地址访问,俗称野指针访问。
h. 在异步方法中如果能直接执行block就直接执行如果不需要立即执行就需要用一个属性来记录block,在需要的时候执行。
i. 解决循环引用最终的一点就是打破强引用循环。
j. 注意 : 循环引用并没有那么容易出现。
k. 只有在有【成员变量】或者【属性】对外部的block 进行了记录这时就需要考虑循环引用。
*/
21.
析构函数与 OC 的dealloc方法的作用是一致的。
22.
swift中的当发现一个对象为nil,不会给它发送任何消息;
而OC中会发送消息,但没有任何作用。











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值