精华内容
参与话题
问答
  • swift基础视频教程

    千人学习 2015-12-30 16:14:11
    Swift,苹果于2014年苹果开发者大会发布的新开发语言,可与Objective-C共同运行于Mac OS和iOS平台,用于搭建基于苹果平台的应用程序。 Swift是一款易学易用的编程语言,而且它还是第一套具有与脚本语言同样的表现力...
  • Swift_3.0 相对于 Swift_2.2 版本发生了哪些的变化。本文件将以最直观的代码对比以及文字分析阐述。

    一、编译器和语法变化



    函数或方法参数


    • 调用函数或方法时从第一个参数开始就必须指定参数名

    在Swift的历史版本中出现过在调用函数时不需要指定任何函数参数(或者从第二个参数开始指定参数名),在调用方法时则必须从第二个参数开始必须指定参数名等多种情况,而在Swift3.0中不管是函数还是方法都必须从第一个参数开始必须指定参数名(当然可以使用“_”明确指出调用时省略参数)。

    // 从第一个参数就必须指定参数名,除非使用"_"明确指出省略参数
    func sum(num1:Int,num2:Int)->Int{
        return num1 + num2
    }
    
    sum(num1: 1, num2: 2) // old: sum(1,2)或者sum(1, num2: 2)
    • 取消var参数

    //func increase(var a:Int){
    //    a += 1
    //}
    // 上面的代码会报错,可改写成
    func increase(a:Int){
        var a = a
        a += 1
    }
    • inout参数修饰改放到类型前

    //func increase(inout a:Int) {
    //    a += 1
    //}
    // 上面的代码会报错,可改为
    func increase( a:inout Int) {
        a += 1
    }


    方法返回值


    Swift 3.0 中方法的返回值必须有接收否则会报警告,当然其实主要目的是为了避免开发人员忘记接收返回值的情况,但是有些情况下确实不需要使用返回值可以使用"_"接收来忽略返回值。当然你也可以增加@discardableResult声明,告诉编译器此方法可以不用接收返回值。

    struct Caculator {
        func sum(a:Int,b:Int) -> Int {
            return a + b
        }
        
        @discardableResult
        func func1(a:Int,b:Int) ->Int {
            return a - b + 1
        }
    }
    let ca = Caculator()
    ca.sum(a: 1, b: 2) // 此处会警告,因为方法有返回值但是没有接收
    let _ = ca.sum(a: 1, b: 2) // 使用"_"接收无用返回值
    ca.func1(a: 1, b: 2) // 由于func1添加了@discardableResult声明,即使不接收返回值也不会警告


    可选类型


    Swift3.0对于可选类型控制更加严谨,隐式可选类型和其他类型的运算之后获得的是可选类型而不是隐式可选类型。

    let a:Int! = 1
    let b = a + 1 // 此时强制解包,b是Int型
    let c = a // 注意此时c是Int? 在之前的Swift版本中c是Int!


    Selector的变化


    Selector的改变其实从1.0到3.0经历了多次变化,从最早的@Selector("method:")到现在的#selector(method(param1:))可以说经历了多次修改,好在它变得越来越好,毕竟字符串操作对于语法检查来说是很无助的。

    class MyClass {
        @objc func sum(a:Int,b:Int) -> Int {
            return a + b
        }
        
        func func1(){
            let _ = #selector(sum(a:b:))
        }
    }
    
    // old: Swift 2.2
    //class MyClass {
    //    @objc func sum(a:Int,b:Int) -> Int {
    //        return a + b
    //    }
    //    
    //    func func1(){
    //        let _ = #selector(sum(_:b:))
    //    }
    //}


    协议中的可选方法


    在Swift3.0之前如果要定义协议中可选方法,只需要给协议加上@objc之后方法使用optional修饰就可以了,但是Swift3.0中除了协议需要@objc修饰,可选方法也必须使用@objc来修饰。

    @objc protocol MyProtocol {
        @objc optional func func1() //old: optional func func1()
        func func2()
    }


    取消++、--操作符


    var d = 1
    d++ //报错,可以改写成 d += 1 或者 d = d + 1


    取消C风格for循环


    //for var i = 0 ;i < 10 ; i += 1 {
    //    debugPrint(i)
    //}
    // 上面的代码会报错,可改写成如下代码
    for i in 0  ..< 10  {
        debugPrint(i)
    }



    二、SDK类库变化


    大家都知道Swift诞生在Objective-C已经发展的相当成熟的情况下,为了保证ObjC开发人员顺利过渡到Swift,也因为Swift处于初级阶段,很多类库和方法命名都尽量和ObjC保持一致,在使用Swift开发iOS应用中处处可以看到ObjC的影子。但是作为一门Modern语言Swift还是做出了改变,从中可以看出日后Swift将彻底摆脱ObjC的影子。这其中包括重新导入Foundation消除类型前缀、方法名去重、函数和方法去C风格等等。


    命名


    // 1.去掉前缀
    let url1 = URL(string: "www.cmjstudio.com")
    let isFileURL = url1?.isFileURL //old:url1.fileURL ,现在更加注重语意
    let data1 = Data() //NSData
    
    // 2.方法名使用动词,其他名词、介词等作为参数或移除
    var array1 = [1,2,3]
    array1.append(contentsOf: [4,5,6]) // old:array1.appendContentsOf([4,5,6])
    array1.remove(at: 0) // old:array1.removeAtIndex(0)
    
    // 3.不引起歧义的情况下尽量消除重复
    let color1 = UIColor.red() // old:var color1 = UIColor.redColor()
    
    // 4.枚举成员首字母变成小写
    let label1 = UILabel()
    label1.textAlignment = .center // old:label1.textAlignment = .Center
    
    // 5.按钮的Normal状态去掉
    let btn1 = UIButton()
    btn1.setTitle("hello", for: UIControlState()) // 相当于Normal状态


    去C风格


    Swift发展初期很多类库的引入依然保持的ObjC风格,但是ObjC由于根出C语言,因此很多操作其实并不是对象和方法操作而是C语言的函数形式。到了Swift3.0之后这一现状将发生变化,全局函数将会变成某些类型的方法;某些常量定义将以某个枚举类型的成员来表示。

    let rect1 = CGRect(x: 0, y: 0, width: 100, height: 100)
    // 下面的代码将要报错,3.0完全废除这种类C的风格
    //let rect1 = CGRectMake(0, 0, 100, 100)
    
    if let context1 = UIGraphicsGetCurrentContext() {
        CGContext.fillPath(context1) // old:CGContextFillPath(context1!)
    }
    
    // GCD的改变
    let queue = DispatchQueue(label: "myqueue")
    queue.async {
        debugPrint("hello world!")
    }
    // old:
    //let queue = dispatch_queue_create("myqueue", nil)
    //dispatch_async(queue) {
    //    debugPrint("hello world!")
    //}
    
    // 相关常量定义被移到枚举内部
    NotificationCenter.defaultCenter().addObserver(self, selector: #selector(userDefaultChange()), name: UserDefaults.didChangeNotification, object: nil)
    //old:NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(userDefaultChange()), name: NSUserDefaultsDidChangeNotification, object: nil)


    集合API的变化


    let array1 = [1,2,3]
    let next = array1.index(after: 0)  // old:let start = array1.startIndex let next = start.successor()
    let first = array1.first { (element) -> Bool in // 增加新的方法
        element > 1
    }
    
    let r = Range(0..<3) //old: let _ = NSRange(location: 0, length: 3)
    
    // 下面的代码必须在控制器中执行,用于遍历当前view及其父视图
    for subview in sequence(first: self.view, next: { $0?.superview }){
        debugPrint(subview)
    }


    新的浮点协议


    Float、Double、CGFloat使用了新的协议,提供了提供 IEEE-754标准的属性和方法。

    let a = 2 * Float.pi // old: let a = 2 * M_PI
    let b = 2.0 * .pi // 注意前面是浮点型,后面可以省略Float



    三、从Swift_2.2迁移到Swift_3.0


    可以看出如果要更新到Swift3.0现有项目需要作出大量修改,经过使用之前的项目进行测试,区区十个类文件就出现了一百多个错误,不过好在Xcode 8已经提供了很好用的迁移工具(Xcode:Editor - Convert - To Current Swift Syntax),经过迁移工具转化后仅仅发现两处错误需要手动修正。在使用这个工具的时候大家会看到如下界面:



    Swift 2.3?没错Swift2.2和Swift 3.0中间还有个Swift 2.3,Apple也解释了什么是Swift 2.3,其实就是Swift 2.2 + New SDKs。之所以如此是因为Xcode 8目前还是beta版,使用Swift 3.0进行开发的应用还不能提交App Store,因此在Swift 2.2基础上使用新的SDK开发还是有存在必要的。

    展开全文
  • 本人最近开始学习有关Swift这个新东东,由于没有项目支撑,只能通过官方文档进行自学,精简的看了Swift官方文档,感觉理解起来还是比较简单,于是突发奇想,想把官方object-c的sample进行改造,使用Swift完成重点...

    一、文章简介

    本人最近开始学习有关Swift这个新东东,由于没有项目支撑,只能通过官方文档进行自学,精简的看了Swift官方文档,感觉理解起来还是比较简单,于是突发奇想,想把官方object-c的sample进行改造,使用Swift完成重点sample的改造,并对在改造过程中出现的问题进行分析,由于是初学,希望各类大牛能够指出其中错误,我会及时修改。预计每天更一篇,争取本周末搞定。

    首先想改造的就是笔者最关心的tableView和CG,最好的例子莫过于Element。下面章节将介绍一下这个例子(由于时间久远,对于该例子的介绍可能有出入,会在改造过程中及时跟新)。本文使用xcode 6.0.1。

    完整源代码下载(2014年11月6日更新,完美匹配swift,能够完美运行)

    二、Sample说明

    本章重点主要介绍并分析Element这个例子的相关内容,帮助大家回忆这个例子的细节。

    1、功能介绍

    本例以table罗列了元素周期表的元素,并通过tab分了4个纬度(按名称排序、按编号排序、按简称首字母分组并按名称排序、按状态分组并按名称排序)进行排序或分组,点击table的cell能够翻页查看元素的详细信息。具体如下图(这是我按照sample略作修改后的效果,本人比较懒,省略了sample中很多重复性的内容,并将文件结构按照我的习惯做了调整)。如图(1-3图是tab+table多维度展示数据,4-6图是明细页面)。  

         

    2、技术概述

    1.常用的tabView、tableView等常用组件的使用,其中包含了table分组、自定义cell、以及segue的相关应用、View的动画效果等。

    2.CG的很多应用,主要体现在定位绘图、制作阴影等。

    3.plist及xcassets的简单使用

    3、实现过程

    非常简单但内容丰富的实例,分解为以下步骤。

    1.绘制页面及关系
    通过storyboard绘制应用的页面关系并自定义部分类,其中包含分组页签tabView、导航栏navigation、展示列表tableView(其中还有列表字段cell)、明细展示页面detailView。

    2.构造数据对象及对应的service
    创建化学元素的实体对象,并创建对应的操作服务,该服务通过plist组装和处理数据对象集合。
    3.列表页面信息加载
    创建tableVIew数据协议,并按不同维度实现,初始化页面时通过化学元素对象服务组装页面需要显示的内容。

    4.明细页面信息展示
    将选中行数据传入datailVIew页面,该页面通过CG绘制需要展示的信息(需要绘制正反2个),并加入切换动画和阴影。

    展开全文
  • Swift学习笔记 - Swift属性只读

    千次阅读 2016-10-30 19:51:47
    在OC中我们经常用到只读属性,用readonly修饰一下就行了,但在Swift中已经不是这样修饰的了,下面记录一下Swift中只读属性的使用 在OC中的只读://只读属性 @property(readonly, nonatomic) NSObject *wcl;在Swift中...

    OC中我们经常用到只读属性,用readonly修饰一下就行了,但在Swift中已经不是这样修饰的了,下面记录一下Swift中只读属性的使用

    OC中的只读:

    //只读属性
    @property(readonly, nonatomic) NSObject *wcl;

    Swift中的只读:

    //只读属性
    private(set) var wcl
    展开全文
  • 完美解决swift代码不能自动提示和补全

    Swift教程_swift常见问题(0001)_CoreData: warning: Unable to load class named 'xxx' for entity 'xxx'

    Swift教程_swift常见问题(0002)_完美处理SourceKitService Crashed异常,6.1.1大部分已经修复

    Swift教程_swift常见问题(0003)_storyboard修改不生效

    Swift教程_swift常见问题(0004)_swift代码不能自动提示和补全

    Swift教程_swift常见问题(0005)_完美解决Cannot override 'dealloc'异常

    Swift教程_swift常见问题(0006)_完美解决swift数组索引是变量时的内存溢出

    Swift教程_swift常见问题(0007)_Can't find model for source store


    问题描述:

    对于使用xcode 6 的测试版本 ,写swift代码不能自动提示和补全。


    解决方案:

    删除所有中文注释,包括头注释中的copyright中的中文,包括2014年的“年”字,当然,中文变量和图片变量还是可以用的。

    原因是xcode内置编辑器对中文支持不是很好,在注释中填写中文有一定几率会无法识别,导致上述错误。


    若是xcode6.1,不会出现以上问题,但是偶尔会出现SourceKitService Crashed、SourceKitService Terminated异常,已经有完美解决方案,参考:

    Swift教程_swift常见问题(0002)_完美处理SourceKitService Crashed异常,6.1.1大部分已经修复


    点击进入ooppookid的博客

    展开全文
  • 原文:http://www.coolketang.com/staticCoding/5a9923b4ac502e5d51cb3dc6.html1. Playground是苹果推出的一款用来学习、演示Swift语言的实用工具,本节课将为您演示它的使用方法。首先点击欢迎面板中的[以...
  • 完美解决swift数组索引是变量时的内存溢出
  • ios swift 实现饼状图进度条 // // ProgressControl.swift // L02MyProgressControl // // Created by plter on 7/29/14. // Copyright (c) 2014 jikexueyuan. All rights reserved. // import UIKit class ...
  • Swift——(五)Swift中的那些默认值

    千次阅读 2014-06-23 22:59:21
    AlienTech for better life!~
  • 第一种 for 循环方式 第二种 for in方式 第三种 索引-值方式... = [1,2,3,4,6,7,8,9,22] let legh = arr.count for var i = 0;i < legh;i++ { printLogs("\(i)") }结果: 第二种 方式 forin 方式 l
  • Swift快速入门(一)第一个Swift程序

    万次阅读 2016-01-23 14:30:02
    本系列只是一个Swift快速入门的教程,并没有详尽的介绍SwiftSwift也并不是一个简单的编程语言,所以要想详尽的系统的学习Swift,本系列并不适合你,此系列只是让开发者可以快速的用Swift来进行开发。另外学习本...
  • swift3.0之后,GCD的语法发生了翻天覆地的变化,从过去的c语法变成了点语法,下面是变化之后用GCD实现计时器的方法: 先贴代码:// 定义需要计时的时间 var timeCount = 60 // 在global线程里创建一个时间源 let ...
  • Swift——(三)Swift中下划线的妙用

    万次阅读 2014-06-13 21:39:52
    AlienTech for better life!~
  • Swift的开发环境可以使用苹果平台(OS X)或Linux系统(Ubuntu),这里介绍在我在Ubuntu 14 server下安装Swift运行环境的过程1、安装所需的依赖项$ sudo apt-get install clang libicu-dev我是先安装的clang,中间会...
  • 既然讲的是Swift和OC的混合编程,我的上一篇博客《》
  • 在iOS应用的开发中,Swift必将取代OC,两者的趋势是“短期共存,长期取代”。但以前有太多的代码是用OC语言完成的,而Swift的开发也从 OC中继承了很多的特性,两者也是有很多的类似之处。目前Swift和OC可以实现无缝...
  • AlienTech for better life!~
  • double的格式化输出 例如保留两位小数//Double的延展 extension Double { func format(f: String) -> String { return String(format: "%\(f)f", self) } } let b:Double = 1.2568 ...
  • 通过博客的方式来记录自己的学习Swift过程,同时把学习的内容分享给大家,希望能为你提供一点帮助
  • 微信的摇一摇功能想必大家都用过,过年的时候抢红包也没少摇吧,那么用swift语言如何实现这么酷炫的功能呢。摇动属于IOS内置可识别的一种动作,在你需要实现摇动功能的viewcontroller中,在viewDidLoad方法中加入...
  • Swift Playground精讲

    万次阅读 2017-01-01 16:49:16
    对于Swift初学者来说,它简单易用,可以实时预览代码效果,非常适合学习Swift这门语言。在日常开发中,playground可以进行快速的原型开发和试错。当然,playground支持markup标注,用来Swift相关的书籍也不错。 基础...
  • 1. 日志输出功能经常被用于代码的调试,本节课将为您演示几个常见的... 4. 从底部的控制台也可以看到输出的日志信息。 5. debugPrint可以将推断出的类型添加到输出,例如给字符串内容添加双引号。 6. dump通常...
  • Swift 3.0介绍

    千次阅读 2017-02-22 21:41:39
    概述我接触swift是从2.0开始,当时出于对ios的好奇,加上官方的大力推荐,于是扎入了ios的怀抱,从1.2发展到了今天的3.0.1,这期间由于Swift目前还在发展阶段并不能向下兼容,这也造成部分我们2.x开发的版本在新版本...
  • 之前我们做过如果要点击一个按钮实现跳转到另一个按钮的办法,有时候我们需要通过一些动作来触发页面的跳转,比如摇动手机,这样就不能直接用连线的办法来实现跳转了,那么如何通过代码的方式来实现跳转呢?...
  • 今天来讲一下如何让我们的APP可以访问系统的短信和电话功能。首先来说短信功能,比较简单,跟之前的做法差别不大,要使用UIApplication,它是一个单例。... @IBAction func phoneBtn(sender:UIButton){ ...
  • Swift——(四)Swift中"#"的妙用

    千次阅读 2014-06-16 10:38:55
    AlienTech for better life!~
  • KVO and Swift

    千次阅读 2016-07-18 09:55:25
    不像Objective-c中的类,Swift类对于KVO并没有原生的支持,不过你可以在类型安全的前提下使用属性观察者轻松的完成相同的目标. 不管如何,从NSObject类派生出的类是支持KVO的,如果你想在不使用属性观察者的情况下使用...
  • Swift入门教程系列5-函数+selector在swift中的用法

    千次阅读 多人点赞 2014-10-18 09:03:49
    工欲善其事必先利其器 Swift就是IOS开发的利器
  • Swift中有存储属性和计算属性两种。其中在计算属性中可以实现setter和getter方法,我们在playground中定义两个结构体: struct Point { var x = 0.0, y = 0.0 } struct Size { var width = 0.0, hight = 0.0 } ...
  • 第二种方式,通过隐藏的符号 @asmname把C语言的函数映射成swift的函数 具体以下解释 *第一种 桥接方式* -------而对于第三方的 C 代码,Swift 也提供了协同使用的方法。我们知道,Swift 中调用 Objective-C 代码...

空空如也

1 2 3 4 5 ... 20
收藏数 82,183
精华内容 32,873
关键字:

swift4 协议 模板