Swift、OC
文章平均质量分 79
Longshihua
喜欢iOS开发,目前在上海工作!专注Swift学习!
展开
-
Swift 构造过程
类,结构体和枚举都有一个称为构造器的东西,这个东西帮我们完成初始化工作.其实构造器是一个名叫init的方法,这个方法可以有参数列表,但是没有返回值.在方法体里面进行所有的初始化工作,例如:给每个存储属性设置一个初始值,完成所有初始化有关的工作.//先看看构造语法的格式: init(形参列表){ //注意:没有定义返回值 //方法体进行初始化的一系列操作}class Bu原创 2016-01-25 20:18:09 · 973 阅读 · 0 评论 -
Swift - 数组(Array)
数组数组是swift中最普通的集合,数组是有序的容器,并且容器中的每一个元素都是相同的类型,可以随机访问元素,相同的值可以多次出现在一个数组的不同位置中。数组的简单语法写Swift数组应该遵循像Array这样的形式,其中Element是这个数组中唯一允许存在的数据类型。我们也可以使用像[Element]这样的简单语法。尽管两种形式在功能上是一样的,但是推荐[原创 2017-04-18 09:09:33 · 1821 阅读 · 0 评论 -
Swift - 关键字(typealias、associatedtype)
Typealiastypealias 是用来为已经存在的类型重新定义名字的,通过命名,可以使代码变得更加清晰。使用的语法也很简单,使用typealias 关键字像使用普通的赋值语句一样,可以将某个已经存在的类型赋值为新的名字。比如在计算二维平面上的距离和位置的时候,我们一般使用Double来表示距离,用CGPoint来表示位置:func distance(_ point:原创 2017-07-04 18:36:49 · 13238 阅读 · 0 评论 -
Swift 类,结构体,枚举使用总结
类,结构体,枚举既有相同之处,也有不同之处.相同之处在于:1:都可以通过定义不同的属性来保存自己的数据.2:都可以通过定义方法来实现不同的功能.3:都可以在定义下标方法后,通过下标方法的语法来获取和修改自己保存的值.4:都可以定义构造器来设置不同属性的初始值.5:都可以使用extention关键字来扩充其功能.6:都可以遵守协议来通过特定种类的功能.不同之处原创 2016-01-27 19:45:29 · 1236 阅读 · 0 评论 -
Swift - AnyClass,元类型和 .self
在Swift中能够表示 “任意” 这个概念的除了 Any 和 AnyObject 以外,还有一个AnyClass。我们能够使用AnyClass协议作为任意类型实例的具体类型。AnyClass在Swift中被所定义:typealias AnyClass = AnyObject.Type通过AnyObject.Type这种方式所得到是一个元类型 (Meta)。在声明时我们总是在原创 2017-07-05 09:08:06 · 3031 阅读 · 0 评论 -
Swift 协议(Protocols)
协议定义了一个蓝图,规定了用来实现某一特定工作或者功能所必需的方法和属性。类,结构体或枚举类型都可以遵循协议,并提供具体实现来完成协议定义的方法和功能。任意能够满足协议要求的类型被称为遵循(conform)这个协议。协议定义,协议中的属性需求,协议中的方法需求//土豪修别墅,看看如何使用协议@objc protocol Villa{ //土豪朋友必须知道有多少层,实例属性原创 2016-02-02 14:40:32 · 2897 阅读 · 0 评论 -
Swift 继承
一个类可以继承(inherit)另一个类的方法(methods),属性(properties)和其它特性。当一个类继承其它类时,继承类叫子类(subclass),被继承类叫超类(或父类,superclass)。在 Swift 中,继承是区分「类」与其它类型的一个基本特征。 在 Swift 中,类可以调用和访问超类的方法,属性和下标脚本(subscripts),并且可以重写(ove原创 2016-01-25 16:23:48 · 436 阅读 · 0 评论 -
Swift - 可选协议和协议扩展
Objective-C中的protocol里存在@optional关键字,被这个关键字修饰的方法并非必须要被实 现。我们可以通过协议定义一系列方法,然后由实现协议的类选择性地实现其中几个方法。在 Cocoa API 中很多情况下协议方法都是可选的,这点和Swift中的protocol的所有方法都必须被 实现这一特性完全不同。那些如果没有实现则协议就无法正常工作的方法一般是必须的,而原创 2017-07-06 09:10:23 · 1780 阅读 · 0 评论 -
Swift - 风格指南
在看objc出版的《Swift进阶》中,看到编程风格习惯的内容,觉得很不错。所以这里记录下来,希望我们在自己的项目中使用 Swift 代码时,也应该尽量遵循如下的原则:1:对于命名,在使用时能清晰表意是最重要。因为API被使用的次数要远远多于被声明的次数,所以我们应当从使用者的⻆度来考虑它们的名字。尽快熟悉 Swift API 设计准则,并且在你自己的代码中坚持使用这些准则。原创 2017-09-22 14:10:52 · 299 阅读 · 0 评论 -
Swift4 - KVC与KVO
KVC和KVO是我们开发中常用的功能,现在来看一下在Swift4中的变化KVC在Swift4的时候,Struct也支持KVC,我们不在使用setValue: forKeypath的方式,而是使用新的语法特性,索引,下面看一下例子,参考这里:struct Person { var name: String}struct Book { var title:原创 2017-12-05 20:42:51 · 2063 阅读 · 0 评论 -
Swift 自动引用计数(ARC)
Swift 使用自动引用计数(ARC)机制来跟踪和管理你的应用程序的内存。通常情况下,Swift 的内存管理机制会一直起着作用,你无须自己来考虑内存的管理。ARC 会在类的实例不再被使用时,自动释放其占用的内存。自动引用计数的工作机制当你每次创建一个类的新的实例的时候,ARC 会分配一大块内存用来储存实例的信息。内存中会包含实例的类型信息,以及这个实例所有相关属性的值。此外,当原创 2016-01-29 14:06:42 · 829 阅读 · 0 评论 -
iOS - 正则表达式
正则表达式又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。模式匹配允许我们做很多有用的事情,比如:验证手机号,邮箱,确认输入,执行高级的文本控制原创 2018-01-30 14:22:37 · 474 阅读 · 0 评论 -
Swift - Static和Class
static 和 class在Swift中static和class都表示“类型范围作用域”的关键字。在所有类型中(class、static、enum)中,我们可以使用static来描述类型作用域。class是专门用于修饰class类型的。static可以修饰属性和方法class Person { // 存储属性 static let age: Int = 20 // 计算...原创 2018-03-01 18:59:21 · 5020 阅读 · 0 评论 -
Swift学习
一:基本知识点 1:类型标注 var welcomeMessage:String前面为定义的变量名,后面为类型.注意:swift中不要求为每一条语句添加分号,如果把多行放到一个物理行,那就必须添加分号.如下: let mystring ="Hello World";println(mystring)打印为 Hello World ...原创 2015-06-27 12:49:56 · 496 阅读 · 0 评论 -
Swift - 柯里化
在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。在Swift中你能够重写一个带多个参数的函数变成带一个参数的函数并且返回函数.返回的函数将继续带一个参数并返回另一个函数,如此循环一直到函数没有参数为止,最后函数所返回的值跟最初原函数(及带多个参数的函数)的值一样!,重写函数就称之为...原创 2017-06-25 16:33:34 · 441 阅读 · 0 评论 -
Swift - 析构过程(Deinitialization)
当一个类的实例被释放之前,析构器会被立即调用。析构器用关键字deinit来标示,类似于构造器要用init来标示。析构器只适用于类类型.析构过程工作原理Swift 会自动释放不再需要的实例以释放资源。Swift 通过自动引用计数(ARC)处理实例的内存管理。通常当你的实例被释放时不需要手动地去清理。但是,当使用自己的资源时,你可能需要进行一些额外的清理。例如,如果创建了一个自定义的类来打原创 2017-07-01 07:23:29 · 436 阅读 · 0 评论 -
Swift 可选链
可空链式调用(Optional Chaining)是一种可以请求和调用属性、方法及下标的过程,它的可空性体现于请求或调用的目标当前可能为空(nil)。如果可空的目标有值,那么调用就会成功;如果选择的目标为空(nil),那么这种调用将返回空(nil)。多个连续的调用可以被链接在一起形成一个调用链,如果其中任何一个节点为空(nil)将导致整个链调用失败。1:可选链存在的理由 为什么swift要原创 2016-01-29 16:41:06 · 640 阅读 · 0 评论 -
Swift3-字符串String.Index和Range详解
String.Index:表示在字符的CharacterView实例中的位置,进入头文件就可以看到,其实是publictypealias Index =String.CharacterView.Index。下面看一个官方例子: let hearts = "Hearts <3 ♥︎原创 2016-12-26 10:21:03 · 22552 阅读 · 1 评论 -
Swift 闭包-牛人的玩物
闭包的概念 闭包就是一个自包含的功能块,你可以按照自己的想法在程序的任何地方使用这个功能块,还可以把功能块传来传去,那需要传哪,这就是闭包. 自包含的意思是:不依赖与其他函数的功能块,自己就能够完成一个完整的功能,能够以独立的方式供其他程序使用. 除了自包含功能块以外,闭包还有一个特异功能,它可以捕获和存储其上下文中任意的变量和常量的引用.想想嵌套函数,嵌套函数被包含原创 2016-01-22 15:24:58 · 720 阅读 · 0 评论 -
Swift 属性
首先了解两个基本概念 类 实例//1:类的概念 对全体的共有特性的抽象和封装,是一种类型.class People{ var name: String = ""}/* 知识点: 1):swift定义类的关键字是class. 2):类的结构有以下几个部分: 关键字class开始. 使用{}包含类的主体 class 和{}之间是类名,如上面P原创 2016-01-22 17:41:32 · 541 阅读 · 0 评论 -
iOS - Block由浅入深
块(Block)是OC对C所做的扩展,使用块可以更好地简化OC编程,而且OC的很多API都依赖于块。块与函数类似,只不过是直接定义在另一个函数里的,和定义它的那个函数共享同一个范围的东西。定义块的语法格式如下:^[块的返回值类型](形参类型1形参1,形参类型2形参2, …){ //块执行体}从上面的语法格式可以看出,定义块非常像定义一个函数,但只是定义一个匿名函数。定义...原创 2015-06-21 19:35:19 · 955 阅读 · 0 评论 -
Swift3.1-根据类名动态创建类
什么是命名空间(namespace)通常来说,命名空间是唯一识别的一套名字,这样当对象来自不同的地方但是名字相同的时候就不会含糊不清了。为什么需要命名空间(namespace)Objective-C 没有命名空间的,在应用开发时,所有的代码和引用的静态库最终都会被编译到同一个域和二进制中。这样的后果是一旦我们有重复的类名的话,就会导致编译时的冲突和失败。为了避免这种事情的发原创 2017-03-09 20:28:18 · 3291 阅读 · 0 评论 -
Swift3.1-实现自定义Log
系统函数打印log的弊端1:非常消耗性能2:如果app部署到AppStore之后用户是看不到log内容的,所以我们只需要在debug开发调试阶段显示log,部署阶段隐藏log在oc开发的过程中一般都会自定义NSLog,使其在debug模式下打印,relese模式下不让其打印,在swift中同样也可以做到:由于swift中没有宏定义,所以在swift中可以使用全局原创 2017-03-07 22:31:25 · 1063 阅读 · 0 评论 -
Swift之过滤器(filter)
Swift提供了很多方便的函数来操作数组,比如 filter,map,reduce,flatMap 等.今天我们了解一下 filter ,顾名思义就是用来过滤的,这是 Swift 为每个数组提供的一个新式武器,filter用于选择数组元素中满足某种条件的元素。假设有一个数组,接着想要创建一个新的数组,新数组包含原数组中所有大于20的元素,我们可以使用下面的for循环:l原创 2016-05-10 15:24:58 · 3215 阅读 · 0 评论 -
Swift-字典(Dictionary)
字典(Dictionary)字典是一种存储多个相同类型的值的容器。每个值(value)都关联唯一的键(key),键作为字典中的这个值数据的标识符。和数组中的数据项不同,字典中的数据项并没有具体顺序。我们在需要通过标识符(键)访问数据的时候使用字典,这种方法很大程度上和我们在现实世界中使用字典查字义的方法一样。注意:Swift 的Dictionary类型被桥接到Found原创 2017-04-20 09:34:50 · 1252 阅读 · 0 评论 -
Swift-集合(Sets)
集合(Sets)集合(Set)用来存储相同类型并且没有确定顺序的值。当集合元素顺序不重要时或者希望确保每个元素只出现一次时可以使用集合而不是数组。集合类型的哈希值一个类型为了存储在集合中,该类型必须是可哈希化的--也就是说,该类型必须提供一个方法来计算它的哈希值。一个哈希值是Int类型的,相等的对象哈希值必须相同,比如a==b,因此必须a.hashValue == b.hash原创 2017-04-22 08:01:10 · 445 阅读 · 0 评论 -
Swift3.1-访问控制(Access Control)
访问控制(Access Control)访问控制可以限定其他源文件或模块中的代码对你的代码的访问级别。这个特性可以让我们隐藏代码的一些实现细节,并且可以指定一些代码和访问和使用的优先接口。你可以明确地给单个类型(类、结构体、枚举)设置访问级别,也可以给这些类型的属性、方法、构造器、下标等设置访问级别。协议也可以被限定在一定的范围内使用,包括协议里的全局常量、变量和函数。原创 2017-03-21 15:21:55 · 1611 阅读 · 0 评论 -
Swift-方法(Methods)
方法是与某些特定类型相关联的函数。类、结构体、枚举都可以定义实例方法;实例方法为给定类型的实例封装了具体的任务与功能。类、结构体、枚举也可以定义类型方法;类型方法与类型本身相关联。类型方法与 Objective-C 中的类方法(class methods)相似。 结构体和枚举能够定义方法是 Swift 与 C/Objective-C 的主要区别之一。在 Objective-C 中,原创 2016-01-25 14:37:24 · 619 阅读 · 0 评论 -
Swift之自动闭包(@autoclosure、@noescape、@escape、??)
@autoclosure(自动闭包) 1:自动闭包,顾名思义是一种自动创建的闭包,用于包装函数参数的表达式,可以说是一种简便语法. 2:自动闭包不接受任何参数,被调用时会返回被包装在其中的表达式的值。 3:自动闭包的好处之二是让你能够延迟求值,因为代码段不会被执行直到你调用这个闭包,这样你就可以控制代码什么时候执行。 4:含有autoclosure特性的声明同时也具有noescape的特性,及默认...原创 2016-05-12 15:08:57 · 7356 阅读 · 2 评论 -
Swift - 元组(Tuples)
元组(tuples)把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型。下面这个例子中,(404, "Not Found") 是一个描述 HTTP 状态码(HTTP status code)的元组。HTTP 状态码是当你请求网页的时候 web 服务器返回的一个特殊值。如果你请求的网页不存在就会返回一个 404 Not Found 状态码。原创 2017-06-30 09:26:24 · 496 阅读 · 0 评论 -
Swift - 可选类型
可选类型 目的:使用可选类型(optionals)来处理值可能缺失的情况.下面的例子使用这种构造器来尝试将一个String转换成Int: let possibleNumber = "123" let convertedNumber = Int(possibleNumber) //打印输出:convertedNumber 123然而,并不是所有的字符串都可以转换成一个整数。字符串"123...原创 2015-10-29 17:00:22 · 530 阅读 · 0 评论