Swift3基础语法

/*基本说明
 创建游乐场,可以立即看到效果
 
 创建对象:
 OC:alloc init
 Swift: XXX()
 
 调用方法
 OC: [UIColor redColor];
 Swift: UIColor.red
 
 枚举:
 OC: UIButtonTypeContactAdd
 Swift:UIButtonType.contactAdd 其中UIButtonType可以省略
 
 创建结构体
 OC: CGPointMake()
 Swift: CGPoint()
 */
let view = UIView(frame: CGRect(x:100 ,y:100 , width: 50, height:100))
view.backgroundColor = UIColor.red

let btn = UIButton(type: .contactAdd)
btn.center = CGPoint(x: 25, y: 50)
view.addSubview(btn)
/*常亮和变量
 let: 定义常量,不可修改
 var: 定义变量,可修改
 注意: swift中定义常量和变量不需要写数据类型,编译器会根据后面的真实类型自动推导,10是int型,10,1是double类型
      每行语句末尾可以不写分号结尾(写了也没关系),若不写会自动将换行作为语句结尾,如果一行有多条语句,那么每条语句结尾必须写上分号
 */
/*数据类型转换
 OC: 数据类型写在变量前面
 Swift: 数据类型写在变量后面,并且用冒号隔开
 强制转换: 数据类型()
 Swift中不存在隐式类型转换,所有类型转换都是显示的,如下面let sum = num1 + num2会报错,但OC会自动将num1变成10.0再相加
 */
/*
 分支_if
 Swift中if使用基本和OC一致
 1.Swift中if可以省略后面的()
 2.Swift中哪怕if后面只有一条语句,也不能省略{}
 3. 在C和OC中,if括号内非0即真
    在Swift中,if括号内只能放bool值,取值只有两个 true/false,若是if a 则错误
 
 分支_if else
 1.Swift中if else和OC一样使用
 2.但Swift中if else可以使用三目运算符简写
 
 分支_switch
 1.switch后面的()可以省略,case后面的break可以省略
 2.OC中如果没有break会穿透,但Swift不会穿透
 3.OC中如果要在case中定义变量要加{}作用域,Swift不用
 4.OC的default位置可以随便放,只要所有case都不满足就会执行default,但Swift中default只能放在最后
 5.OC中的default可以省略,但Swift中大部分不能省略
 
 分支_for循环
 以下...之间不可有空格
 0..<10 代表一个区间范围,含头不含尾,从0到9,按下面的例子,会将0-9之间的值,依次赋值给i,然后在执行循环中的打印语句,若不需要i,可以使用_
 _ 代表忽略,如果不关心某个参数,就可以使用_
 0...10 代表一个区间范围,含头含尾,从1-10
 
 分支_while循环
 Swift中while循环和OC中使用一样
 
 分支_do while循环
 do while没有do,因为do被用于捕获异常了
 */
/*可选类型:如下列,url创建的可能有值也可能是nil(url含中文),所以就返回可选类型
 Optional   代表可以有也可以没有
 convenience init?  若看到方法或数据类型后面有? 代表返回的是一个可选类型
 注意:    若打印可选类型,结果会被Optional包裹,如果不想被包裹,则需要加一个!
 !  代表告诉编译器,可选类型中一定有值,强制解析
    如果可选类型中没有值,而又强制解析,则会崩溃
 可选绑定,会将url中的值取出来赋值给urlFinal变量,如果值不为nil,才会进入{},按住Option看到urlFinal是不带?的,而上面的url是带?的
 */
/*字符串String是个结构体,而OC中是NSString是个对象,继承与NSObject
 定义:    OC用@"",Swift用""
 拼接:    直接+=
 格式化拼接: \()或者format,arguments,其中format,arguments需要将所有的值放入数组中
 和OC转化: : NSString或as NSString
   截取:    使用OC的字符串截取,先将Swift字符串转化成OC字符串再截取
 遍历:      for循环直接遍历
 */
/*备注
 
 SWift特点:
 快速,现代,安全,互动,明显优于OC
 可用框架Cocoa 和Cocoa Touch
 取消了OC的指针和其他不安全性的访问,OC是动态运行时,你写的即时不对,编译也不报错,但Swift会在编译的时候报错
 舍弃了OC的smalltalk语法,改为句点表达法
 提供了类似Java的名字空间,泛型,运算对象重载等高级语法
 Swift是没有C的OC
 
 
 
 开发技巧: 按住option,点num即可看到类型
 句末不用分号结尾,Swift会自动帮我们在句末添加分号,但如果一行有多句语句,要用分号隔开
 Swift是强语言,OC是弱语言,若是在OC中 int a = 10.1,OC会将a强制转化成10
 Swift中数据类型首字母大写
 没有C中的++和-- 变成了+=1
 OC是在运行时发现错误,?和!的使用,使得Swift是在编译过程中就发现大部分错误
 ? 可选类型,可以有值也可以没值
 ! 强制解析,之前要进行判断
 控制器中能不写self,就不写self,你写在哪个控制器内的view,就证明你调的是那里的view
 看见self证明你是在闭包中
 
 通过调用栈来分析调用步骤
 */

    
    /*
     OC的Block: 类似于匿名函数,用于保存一段代码,在需要的时候执行
     Swift的闭包:也是用来定义函数,也用于保存一段代码,在需要的时候执行
     作用:在耗时操作时使用
     定义: in用来去等形参返回值和执行代码
     {
        (形参列表) -> (返回值)
        in
        需要执行的代码
     }
     */
    func sum (number1:Int, number2:Int) -> Int
    {
        return number1 + number2;
    }
   
    func loadData(finished: ()->())
    {
        print("执行耗时操作")
        finished()
    }
//在viewDidLoad中调用
        let sumTwoNubmer = sum(number1:2, number2: 3)
        print(sumTwoNubmer)
        
        loadData(finished:
            {print("被回调了")
            view.backgroundColor = UIColor.red
            })
   
    //要求:定义一个方法来创建UIScrollView,并且UIScrollView上有多少个按钮必须通过闭包来告诉该方法
    func creatScrollView(btnCount: () -> Int) -> UIScrollView
    {
        //1.创建scrollView
        let sc = UIScrollView(frame: CGRect(x: 100, y: 100, width: 200, height: 50))
        sc.backgroundColor = UIColor.red
        //创建N多Button
        let count = btnCount()
        for i in 0..<count
        {
        let btn = UIButton(frame: CGRect(x: i*80, y: 0, width: 80, height: 30))
        btn.setTitle("标题\(i)", for: UIControlState.normal)
        btn.backgroundColor = UIColor.blue
        sc.addSubview(btn)
        }
        sc.contentSize = CGSize(width: count*80, height: 0)
        return sc
    }
//在viewDidLoad中调用
        //闭包创建button个数,当调用这个方法时候,调用下面的creatScrollView函数,当执行到let count = btnCount(),会返回来调用这个闭包,得到5,再将值赋值给count
        let sc = creatScrollView { () -> Int in
            return 5
        }
        view.addSubview(sc)
    //循环引用
    //定义属性保存block最容易出现循环引用,在闭包中使用了self就循环引用了
    //析构函数,相当于OC中的dealloc
    deinit
    {
        print("被销毁")
    }
    //懒加载:用到时再加载,节约性能,并且只加载一次
    //格式:定义变量时前面使用lazy来修饰变量,后面通过等号赋值一个闭包
    //注意1.必须用var修饰,注意2:闭包后面必须跟上()注意3:如果闭包是用于懒加载,那么in之前的代码都可以删除,包括in
    lazy var dataList: [String] =
    {
        () -> [String]
        in
        print("懒加载执行了")
        return["1","2","3"]
    }()
    
    lazy var dataList2: [String] =
    {
        print("哈哈哈哈哈哈")
        return["6","7","7"]
    }()
    
    
    //懒加载执行了这句话只会调用一次,但会按点击次数输出["1","2","3"]
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
    {
        print(dataList)
        print(dataList)
        print(dataList)
        
        print(dataList2)
        print(dataList2)
        print(dataList2)
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容

  • //再看官网的 时候看见这个关键字 很疑惑 protocol ExampleProtocol { var simp...
    march_1991阅读 415评论 0 0
  • 生活是生活是旅行。遇到各式各样的风景,各式各样的人,各式各样的事儿。最终能够体会到旅行的意义,珍惜旅行的每个瞬间。...
    山鬼流之阅读 923评论 0 2
  • 一曲秋雨夜微凉,几许清歌仿若春。 独坐书台苦思夏,奈何时节欲冬来。
    凌峰丶阅读 194评论 0 0
  • 她很善良,也很美丽。父母唯一的孩子。在感情上受过伤,认识始于一次咨询。慢慢有一句没一句地闲聊。爱神不知道什么时候悄...
    宝贝小鱼阅读 149评论 0 1
  • ——讲在大观十里中心学校师生共读经典仪式上的话 汪 琼 亲爱的老师、同学们: 春天来...
    犟龟汪琼阅读 826评论 2 3