swift
Young丶
这个作者很懒,什么都没留下…
展开
-
条件编译
在 C 系语言中,可以使用 #if 或者 #ifdef 之类的编译条件分支来控制哪些代码需要编译,而哪些代码不需要。Swift 中没有宏定义的概念,因此我们不能使用 #ifdef 的方法来检查某个符号是否经过宏定义。但是为了控制编译流程和内容,Swift 还是为我们提供了几种简单的机制来根据需求定制编译内容的。首先是 #if 这一套编译标记还是存在的,使用的语法也和原来没有区别:转载 2016-11-28 21:42:34 · 648 阅读 · 0 评论 -
swift iOS8 XIB 问题 ViewController.init() xib
对于OC 中 ViewController *vc = [[ViewController alloc] init],方法默认会加载一个同名的xib文件当View。但是在swift中 ViewController.init() 在 iOS8 上他不会默认加载xib,而在iOS 9 中却默认加载了 xib。 前段时间工程一直在iOS9 + 环境的真机上调试,今天拿iOS8的机子调试,发现所有使原创 2016-09-20 16:22:06 · 1218 阅读 · 0 评论 -
Swift枚举详解
枚举为一系相关联的值定义了一个公共的组类型.同时能够让你在编程的时候在类型安全的情况下去使用这些值。 如果你对C语言很熟悉,你肯定知道在C语言中枚举类型就是一系列具有被指定有关联名称的的整数值.但在Swift中枚举类型就更加灵活了,并且你不必给枚举类型中的每个成员都赋值。如果把一个值(假设值为"raw")提供给所有的枚举类型当中的成员,那么这个值可以是一个字符串,一个字符,一个整数或者说是一个浮点原创 2016-09-14 00:05:56 · 2405 阅读 · 0 评论 -
常量和存储属性
常量和存储属性如果创建了一个结构体的实例并赋值给一个常量,则无法修改实例的任何属性,即使定义了变量存储属性:let rangeOfFourItems = FixedLengthRange(firstValue: 0, length: 4)// 该区间表示整数0,1,2,3rangeOfFourItems.firstValue = 6// 尽管firstValue诗歌变量属性,这原创 2016-09-13 22:20:10 · 626 阅读 · 0 评论 -
class viewController has no initializers解决办法
class ViewController: UIViewController { //这行提示 class viewcontroller has no initializers var stitle : UILabel var webview : UIWebViewvar waitflag : UIActivityIndicatorView var domain :St原创 2016-09-13 16:40:04 · 2362 阅读 · 0 评论 -
值类型 与引用的 copy
结构体和枚举是值类型值类型被赋予给一个变量,常数或者本身被传递给一个函数的时候,实际上操作的是其的拷贝。在之前的章节中,我们已经大量使用了值类型。实际上,在 Swift 中,所有的基本类型:整数(Integer)、浮点数(floating-point)、布尔值(Booleans)、字符串(string)、数组(array)和字典(dictionaries),都是值类型,并且都是以结构体原创 2016-09-13 00:05:05 · 836 阅读 · 0 评论 -
指针 与 swift 中的引用
指针如果你有 C,C++ 或者 Objective-C 语言的经验,那么你也许会知道这些语言使用指针来引用内存中的地址。一个 Swift 常量或者变量引用一个引用类型的实例与C语言中的指针类似,不同的是并不直接指向内存中的某个地址,而且也不要求你使用星号(*)来表明你在创建一个引用。Swift 中这些引用与其它的常量或变量的定义方式相同。类和结构体的选择在你的代码中,你可以原创 2016-09-12 23:53:38 · 819 阅读 · 0 评论 -
Swift之?和!
Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值,也就是说变量不会有默认值,所以要求使用变量之前必须要对其初始化。如果在使用变量之前不进行初始化就会报错:var stringValue : String //error: variable 'stringValue' used before being initialized //let hashValu原创 2016-09-12 22:54:25 · 301 阅读 · 0 评论 -
Swift基础--调用第三方OC项目
第一步:创建和配置Bridging-Header.hSwift与OC进行混编,首先要有一个.h文件,这里使用Bridging-Header.h然后设置项目的Build Settings--Swift Compiler--Objective-C Bridging Header内容为DemoApp/Bridging-Header.h,这个与Bridging-Header.h位置有关,从项目的根原创 2016-09-12 16:07:02 · 649 阅读 · 0 评论 -
如何评价 Swift 语言?
http://www.zhihu.com/question/24002984原创 2016-09-01 21:32:10 · 598 阅读 · 0 评论 -
闭包(Closures)
闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些编程语言中的匿名函数比较相似。闭包可以捕获和存储其所在上下文中任意常量和变量的引用。被称为包裹常量和变量。 Swift 会为你管理在捕获过程中涉及到的所有内存操作。注意 如果你不熟悉捕获(capturing)这个概念也不用担心,你可以在值原创 2016-12-05 11:33:19 · 785 阅读 · 0 评论 -
枚举(Enumerations)
枚举为一组相关的值定义了一个共同的类型,使你可以在你的代码中以类型安全的方式来使用这些值。如果你熟悉 C 语言,你会知道在 C 语言中,枚举会为一组整型值分配相关联的名称。Swift 中的枚举更加灵活,不必给每一个枚举成员提供一个值。如果给枚举成员提供一个值(称为“原始”值),则该值的类型可以是字符串,字符,或是一个整型值或浮点数。此外,枚举成员可以指定任意类型的关联值存储到枚举成原创 2016-12-05 19:41:18 · 2590 阅读 · 0 评论 -
String.Index
字符串索引每一个String值都有一个关联的索引(index)类型,String.Index,它对应着字符串中的每一个Character的位置。前面提到,不同的字符可能会占用不同数量的内存空间,所以要知道Character的确定位置,就必须从String开头遍历每一个 Unicode 标量直到结尾。因此,Swift 的字符串不能用整数(integer)做索引。使用sta原创 2016-12-07 19:37:04 · 2896 阅读 · 0 评论 -
关联类型
关联类型定义一个协议时,有的时候声明一个或多个关联类型作为协议定义的一部分将会非常有用。关联类型为协议中的某个类型提供了一个占位名(或者说别名),其代表的实际类型在协议被采纳时才会被指定。你可以通过 associatedtype 关键字来指定关联类型。关联类型实践下面例子定义了一个 Container 协议,该协议定义了一个关联类型 ItemType:proto原创 2016-12-07 23:11:29 · 2438 阅读 · 0 评论 -
类型约束
类型约束swapTwoValues(_:_:) 函数和 Stack 类型可以作用于任何类型。不过,有的时候如果能将使用在泛型函数和泛型类型中的类型添加一个特定的类型约束,将会是非常有用的。类型约束可以指定一个类型参数必须继承自指定类,或者符合一个特定的协议或协议组合。例如,Swift 的 Dictionary 类型对字典的键的类型做了些限制。在字典的描述中,字典的键的类型必须是可哈原创 2016-12-07 23:14:46 · 694 阅读 · 0 评论 -
Swift溢出运算符
默认情况下,当你往一个整型常量或变量赋于一个它不能承载的大数时,Swift不会让你这么干的,它会报错。这样,在操作过大或过小的数的时候就很安全了。例如,Int16整型能承载的整数范围是-32768到32767,如果给它赋上超过这个范围的数,就会报错:var potentialOverflow = Int16.max// potentialOverflow 等于 32767, 这是 Int原创 2016-09-20 21:53:42 · 813 阅读 · 0 评论 -
swift String
初始化空字符串为了构造一个很长的字符串,可以创建一个空字符串作为初始值。可以将空的字符串字面量赋值给变量,也可以初始化一个新的String 实例:var emptyString = "" // 空字符串字面量var anotherEmptyString = String() // 初始化 String 实例// 两个字符串均为空并等价。您可原创 2016-09-20 22:12:05 · 318 阅读 · 0 评论 -
swift LOG 输出
Log 输出是程序开发中很重要的组成部分,虽然它并不是直接的业务代码,但是却可以忠实地反映我们的程序是如何工作的,以及记录程序运行的过程中发生了什么。在 Swift 中,最简单的输出方法就是使用 print,在我们关心的地方输出字符串和值。但是这并不够,试想一下当程序变得非常复杂的时候,我们可能会输出很多内容,而想在其中寻找到我们希望的输出其实并不容易。我们往往需要更好更精确的输出,这包括转载 2016-11-28 21:41:51 · 949 阅读 · 0 评论 -
在Swift中如何使用C中的Struct
swift 无法直接访问 c 语言的Struct。只能通过指针的方式访问。///////-----例子1开始-------////////The c Lib API : mycapi.htypedef struct{ int itype; double * dx; double * dy;}MyObjInfo;typede原创 2016-11-08 09:35:14 · 1112 阅读 · 0 评论 -
Swift 异常处理
如何建造异常类型?在 iOS 开发当中,我们会面对很多异常处理。在 Cocoa Touch 中我们使用 NSError 来进行异常处理。在新的 Swift 2.0 中,我们可以使用新的ErrorType protocol。在 Swift 中, enum 是最好的方法建立属于你自己的异常类型,你只要在你的 enum 中确认新的ErrorType。enum MyError: Err原创 2016-10-27 20:19:07 · 509 阅读 · 0 评论 -
谈谈 Swift 中的 map 和 flatMap
map 和 flatMap 是 Swift 中两个常用的函数,它们体现了 Swift 中很多的特性。对于简单的使用来说,它们的接口并不复杂,但它们内部的机制还是非常值得研究的,能够帮助我们够好的理解 Swift 语言。map 简介首先,咱们说说 map 函数如何使用。123let numbers = [1,2,3,原创 2016-10-26 23:54:53 · 786 阅读 · 0 评论 -
swift使用cocoapods导入oc三方库
这里主要说几个关于cocoapods导入三方库需要注意的问题和我遇到的坑1、Swift语言使用cocoapods配置Podfile文件时要加上use_framework!这句代码,作用是把三方库打包成静态库,具体为什么我也在研究。。。2、swift调用oc的三方库 a、要建立一个桥接文件,然后在target——>build setting中搜索bridg把Objectiv原创 2016-10-19 10:18:32 · 502 阅读 · 0 评论 -
@available 和 #available
Swift 2.0 中,引入了可用性的概念。对于函数,类,协议等,可以使用@available 声明这些类型的生命周期依赖于特定的平台和操作系统版本。而 #available 用在判断语句中(if, guard, while等),在不同的平台上做不同的逻辑。@available用法@available 放在函数(方法),类或者协议前面。表明这些类型适用的平台和操作系统。原创 2016-10-13 16:36:33 · 841 阅读 · 0 评论 -
Swift的Guard语句
最开始在Apple的Platform State of the Union看见swift的guard语句的时候,我当时不太理解以后会有什么理由能用到它。这个语句的介绍如下:与if语句相同的是,guard也是基于一个表达式的布尔值去判断一段代码是否该被执行。与if语句不同的是,guard只有在条件不满足的时候才会执行这段代码。你可以把guard近似的看做是Assert,但是你可以优雅的退出而原创 2016-10-13 09:51:08 · 438 阅读 · 0 评论 -
Swift类与结构、存储属性、计算属性、函数与方法、附属脚本等
一、类与结构体两者在Swift中差不了多少了类与结构体有很多相同的地方: (第2,3点是其他语言中不存在的)1)都可以定义属性/方法/下标(结构体也可以定义方法了)2)都能初始化(通过构造方法)3)都能使用扩展(extension)与协议(protocol)4)类与结构体(枚举)中的全局属性/方法:在类中用class关键字,但在结构体原创 2016-09-23 22:36:54 · 733 阅读 · 0 评论 -
Swift如何使用Masonry和SnapKit
SnapKit:https://github.com/SnapKit/SnapKitv.snp_makeConstraints { (make) in由于swift和oc语法不一样 equalTo(self.view)是传入参数 make.top.equalTo(self.view).offset(100)原创 2016-09-23 15:04:25 · 2111 阅读 · 0 评论 -
闭包产生的强引用环
闭包产生的强引用环前面我们看到了强引用环是如何产生的,还知道了如何引入弱引用和无主引用来打破引用环。将一个闭包赋值给类实例的某个属性,并且这个闭包使用了实例,这样也会产生强引用环。这个闭包可能访问了实例的某个属性,例如self.someProperty,或者调用了实例的某个方法,例如self.someMethod。这两种情况都导致了闭包使用self,从而产生了抢引用环。因为诸如原创 2016-09-22 23:05:13 · 587 阅读 · 0 评论 -
类的继承和构造过程
类的继承和构造过程类里面的所有存储型属性--包括所有继承自父类的属性--都必须在构造过程中设置初始值。Swift 提供了两种类型的类构造器来确保所有类实例中存储型属性都能获得初始值,它们分别是指定构造器和便利构造器。指定构造器和便利构造器指定构造器是类中最主要的构造器。一个指定构造器将初始化类中提供的所有属性,并根据父类链往上调用父类的构造器来实现父类的初始化。每一原创 2016-09-22 21:49:04 · 802 阅读 · 0 评论 -
修改值类型的实例方法 mutating
修改值类型的实例方法结构体和枚举都是值类型。默认情况下,值类型的属性不能从它的内部实例方法修改。然而,如果你需要修改你的结构体或枚举的属性在一个特定的方法中,你可以在这个方法中选择加入变异行为。然后该方法可以变异(即改变)它的属性,任何的更改在方法结束时写回原来的结构里。该方法还可以分配一个新的实例到其隐含的self属性,而这个新的实例将取代现有的实例,当该方法结束时。你可以加原创 2016-09-21 22:18:44 · 611 阅读 · 0 评论 -
swift 方法的局部和外部参数名
一、什么是外部参数名?浅显地说,外部参数名就是在调用一个方法时要在方法的参数前面加上一个特定的名字,目的是便于阅读代码,提高维护效率。 二、在最新的Xcode中,外部参数名的性质与用法如下性质:函数可同时有局部名称(内部使用)和外部名称(调用函数时使用),方法的参数也类似,不过方法和函数的局部名称和外部名称的默认行为是不一样的 Swift中默认给第一原创 2016-09-21 22:11:16 · 2508 阅读 · 0 评论 -
函数类型
函数类型每一个函数都有特定的函数类型,可以充当参数类型和函数的返回类型。例如:func addTwoInts(a: Int, b: Int) -> Int { return a + b}func multiplyTwoInts(a: Int, b: Int) -> Int { return a * b} 这个例子中定义了两个简单的数学函数addTwoIn原创 2016-09-20 23:11:34 · 460 阅读 · 0 评论 -
Swift3的playground中对UI直接测试支持的改变
我们知道在Xcode的playground中不仅可以测试console代码,还可以测试UI代码,甚至我们可以测试SpriteKit中的场景而在本篇中我们只是简单聊一聊最新的Xcode8.0 beta2(以下简称Xcode8b2)中playground对UIKit支持有了哪些改变.首先贴出以下小段演示代码:// 1import UIKitimport XCPlayground转载 2016-12-15 10:33:26 · 1190 阅读 · 0 评论