如何阅读 Swift 标准库中的源码

如何阅读 Swift 标准源码

在进行完 GYP 预处理后,阅读 Swift 标准源码 最简单 一种方式是执行一次完整 Swift 编译。(另一种是写一小段 shell 脚本。可以看下面更新) 如果你想要开始阅读 Swift 源码,那它标准应该是首先开始阅读地方。标准代码是和每一个使用 Swift 开发者
2016-12-30 16:17   [Swift]

Swift 3.0 标准源码阅读笔记--String

都说代码是最好文档,标准代码+注释真是比官方文档还有用! 先拿最常用 String 开刀! 阅读过程中可以配合 playground 文件: String.playground 用法简介 Swift String 是一个 Unicode 字符串值(struct) Swift String 可以和 Objective-C NSString 相互桥接,很多时候将 String 转换成 NSString 来做一些针对字符串处理会更加方便。 Swift String 还可以很完美地和 C 层进行交互,实现了一些 C 层次 API,并且结果完全一致。 首先先讲讲 String 一些基本用法: 创建 string literals 字符串构建,最简单构建方式 let greeting = "Welcome!" string interpolation 插值构建 let name = "Rosa" let personalizedGreeting = "Welcome, \(name)!" 修改 String 为值类型(struct),修改一个 string 拷贝,原来不会被影响。 var otherGreeting = greeting otherGreeting += " Have a nice time!" print(otherGreeting) //Prints "Welcome! Have a nice time!" print(greeting) // Prints "Welcome!" 原来不受影响 比较 String 比较不是字面值,而是标准化为 Unicode 值 let cafe1 = "Cafe\u{301}" let cafe2 = "Café" print(cafe1 == cafe2) // Prints "true" 最后值为 true unicode \u{301} 做就是把前一个字符做一个升调,可以看到,这两个字符串是相等。 String 类型是不受 Locale 影响。 视图 String 本身是不可迭代,需要通过 String 视图完成集合相关操作,比如下标。 Character View 字符串视图 let cafe = "Cafe\u{301} du :earth_africa:" print(cafe.characters.count) // Prints "9" 注意, string.characters 返回是一个 CharacterView 不是一个 Array print(Array(cafe.characters)) // Prints "["C", "a", "f", "é", " ", "d", "u", " ", ":earth_africa:"]" Unicode ScalarView (UTF-32 View) print (cafe.unicodeScalars.count) // Print "10"
2016-12-09 06:18   [Swift]

优秀源码阅读Swift网络Alamofire

原文:swift网络Alamofire源码分析 阅读优秀源码一直是提高自身技术一个非常好学习方式,用swift也有一段时间了,由于要用到网络, OBJ-C下AFNetworking对应swiftAlamofire, 至于为什么是这个名字, 我也不知道, 不过在wiki上看到对于 Alamo Fire 解释, Texas州州花 本篇文章对于swift网络alamofire实现源码进行分析下(基于版本3.1.1) 目录结构 首先看下源码结构,Source目录下包含Alamofire.swift文件,主要是暴露一些常用调用接口给我们,Core文件夹下是一些核心功能实现文件,Feature是在Core基础上包装成我们更常用,更方便使用功能 如果你只想知道如何使用这个话,基本上你只需要了解Alamofire.swift以及Core/ResponseSerialization.swift这两个文件就可以了 通用工具函数或类 在进行整体分析前,先来说明下当中一些通用东西 Error.swift用于生成NSError错误对象, 包含一些常用网络错误 如数据错误 服务器状态错误,解析序列错误等 ParameterEncoding.swift 网络请求时HTTPcontent-type 如application/x-www-form-urlencoded; charset=utf-8, application/json等 Result.swift 网络返回结果, 一个枚举, 包括Success和Failure, 其成功时会有数据, 失败时会有错误信息, 用于后面response Alamofire.swift里定义两个protocol, public protocol URLStringConvertible:方便NSURLRequest与String转换, 以及public protocol URLRequestConvertible 整体流程图 上图为alalmofire网络请求流程图, 后面会根据此图对一个网络请求从开始到结束整体流程进行分析.由于NSURLSession包含data, upload, download等几种不同task, 本篇主要跟踪data流程, 其余两个流程及原理都是相同, 只是类型不同 根据使用文档, 如果要发起一个GET请求, 服务器返回为JSON类型数据, 只需要使用如下方法 Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"]) .responseJSON { response in print(response.request) // original URL request print(response.response) // URL response print(response.data) // server data print(response.result) // result of response serialization if let JSON = response.result.value { print("JSON: \(JSON)") } } 来看看Alamofire.request方法做了什么, 它
2015-11-19 15:38   [Swift]

Swift如何化简标准冗长类实例初始化代码

可能有些童鞋并不知道,在Swift缩写点符号对于任何类型任何static成员都有效. 我们实际写一个例子看一下: import UIKit class CFoo{ static let sharedInstance = CFoo() } struct SFoo{ static let
2016-08-01 21:06   [Swift]

swift标准发展

Apple一个正在编撰文档表明,swift一个设计初衷是允许程序运行时加载时抽象能高效执行。Apple设计文档提供了与设计者相关信息,包括swift标准swift标准设计者面临一个主要亟待解决问题是保证未来客户端与现有之间兼容性(向前兼容),现有客户端与未来版本
2016-03-09 17:09   [Swift]

Swift标准函数

  Swift中共有74个内建函数,但是在Swift官方文档(“ The Swift Programming Language”)只记录了7。剩下67个都没有记录。   本文将列举Swift所有内建函数。本文中提到所谓内建函数是指那些在Swift不需要导入任何模块(如Foundation等)或者引用任何类就可以使用函数。   abs(signedNumber): 返回给定有符号数字绝对值。很简单,但是没有在文档记录。 abs(-1) == 1  abs(-42) == 42  abs(42) == 42    contains(sequence, element): 如果给定序列(如数组)包含特定元素,则返回true。 var languages = ["Swift", "Objective-C"]  contains(languages, "Swift") == true  contains(languages, "Java") == false  contains([29, 85, 42, 96, 75], 42) == true    dropFirst(sequence): 返回一个去掉第一个元素新序列(如数组)。 var languages = ["Swift", "Objective-C"]  var oldLanguages = dropFirst(languages)  equal(oldLanguages, ["Objective-C"]) == true    dropLast(sequence): 返回一个新序列(如数组),该序列去掉作为参数传递给函数最后一个元素。 var languages = ["Swift", "Objective-C"]  var newLanguages = dropLast(languages)  equal(newLanguages, ["Swift"]) == true    dump(object): 一个对象内容转储到标准输出。 var languages = ["Swift", "Objective-C"]  dump(languages)  // Prints:  // ? 2 elements  // - [0]: Swift  // - [1]: Objective-C    equal(sequence1, sequence2): 如果序列1和序列2包含相同元素,则返回true。 var languages = ["Swift", "Objective-C"]  equal(languages, ["Swift", "Objective-C"]) == true  var oldLanguages = dropFirst(languages)  equal(oldLanguages, ["Objective-C"]) == true    filter(sequence, includeElementClosure): 返回序列一个元素,这个元素满足includeElementClosure所指定条件。 for i in filter(1...100, { $0 % 10 == 0 })  {      // 10, 20, 30, ...      println(i)      assert(contains([10, 20, 30, 40, 50, 60, 70, 80, 90, 100], i))  }    find(sequence, element): 再给定序列返回一个指定索引,如果在序列没有找到这个元素就返回nil。 var languages = ["Swift", "Objective-C"]  find(languages, "Objective-C") == 1  find(languages, "Java") == nil  find([29, 85, 42, 96, 75], 42) == 2    indices(sequence): 在指定序列返回元素索引(零索引)。 equal(indices([29, 85, 42]), [0, 1, 2])  for i in indices([29, 85, 42]) {      // 0, 1, 2      println(i)  }    join(separator, sequence): 返回一个由给定分隔符分离出来序列元素。 join(":", ["A", "B", "C"]) == "A:B:C"  var languages = ["Swift", "Objective-C"]  join("/", languages) == "Swift/Objective-C"    map(sequence, transformClosure): 如果transformClosure适用于所给序列中所有元素,则返回一个新序列。 equal(map(1...3, { $0 * 5 }), [5, 10, 15])  for i in map(1...10, { $0 * 10 }) {      // 10, 20, 30, ...      println(i)      assert(contains([10, 20, 30, 40, 50, 60, 70, 80, 90, 100], i))  }    max(comparable1, comparable2, etc.): 返回函数所给参数最大值。 max(0, 1) == 1  max(8, 2, 3) == 8    maxElement(sequence): 返回所给序列同类元素最大元素。 maxElement(1...10) == 10  var languages = ["Swift", "Objective-C"]  maxElement(languages) == "Swift"    minElements(sequence): 返回所给序列同类元素最小元素。 minElement(1...10) == 1  var languages = ["Swift", "Objective-C"]  minElement(languages) == "Objective-C"    reduce(sequence, initial, combineClosure): 从第一个初始值开始对其进行combineClosure操作,递归式地将序列元素合并为一个元素。 var languages = ["Swift", "Objective-C"]  reduce(languages, "", { $0 + $1 }) == "SwiftObjective-C"  reduce([10, 20, 5], 1, { $0 * $1 }) == 1000    reverse(sequence): 返回所给序列倒序。 equal(reverse([1, 2, 3]), [3, 2, 1])  for i in reverse([1, 2, 3]) {      // 3, 2, 1      println(i)  }    startsWith(sequence1, sequence2):如果序列1和序列2起始元素相等,则返回true。 startsWith("foobar", "foo") == true  startsWith(10..100, 10..15) == true  var languages = ["Swift", "Objective-C"]  startsWith(languages, ["Swift"]) == true    如下列表为Swift74个内建函数。上文所描述函数是我认为在日常开发中比较有用处。当然我可能遗漏了一些常用函数。欢迎大家在评论讨论,并且请用一个简短代码段来展示如何使用该函数。 abs(...)  advance(...)  alignof(...)  alignofValue(...)  assert(...)  bridgeFromObjectiveC(...)  bridgeFromObjectiveCUnconditional(...)  bridgeToObjectiveC(...)  bridgeToObjectiveCUnconditional(...)  c_malloc_size(...)  c_memcpy(...)  c_putchar(...)  contains(...)  count(...)  countElements(...)  countLeadingZeros(...)  debugPrint(...)  debugPrintln(...)  distance(...)  dropFirst(...)  dropLast(...)  dump(...)  encodeBitsAsWords(...)  enumerate(...)  equal(...)  filter(...)  find(...)  getBridgedObjectiveCType(...)  getVaList(...)  indices(...)  insertionSort(...)  isBridgedToObjectiveC(...)  isBridgedVerbatimToObjectiveC(...)  isUniquelyReferenced(...)  join(...)  lexicographicalCompare(...)  map(...)  max(...)  maxElement(...)  min(...)  minElement(...)  numericCast(...)  partition(...)  posix_read(...)  posix_write(...)  print(...)  println(...)  quickSort(...)  reduce(...)  reflect(...)  reinterpretCast(...)  reverse(...)  roundUpToAlignment(...)  sizeof(...)  sizeofValue(...)  sort(...)  split(...)  startsWith(...)  strideof(...)  strideofValue(...)  swap(...)  swift_MagicMirrorData_summaryImpl(...)  swift_bufferAllocate(...)  swift_keepAlive(...)  toString(...)  transcode(...)  underestimateCount(...)  unsafeReflect(...)  withExtendedLifetime(...)  withObjectAtPlusZero(...)  withUnsafePointer(...)  withUnsafePointerToObject(...)  withUnsafePointers(...)  withVaList(...)    欢迎讨论,敬请勘误!    原文: Standard functions in Swift   推荐阅读Swift -- 中文版两大官方文档汇总   Swift专题
2016-01-02 22:35   [iphone]

iOS一点点 - Swift 标准 String

帮到其他人。我很喜欢读这种态度文章,也希望自己文章能有这种水平,希望你也喜欢。 正文 Swift 标准提供了 String 文本类型,适用 Unicode 文本。本文内容就是,如何对它进行定位(index)和切分(slice)。 先看下面例子 let str = "
2016-01-03 13:12   [Swift]

如何阅读redis源码

阅读redis源代码一些体会 最近在学习redis及阅读redis等程序源码时,有一些收获,特记录到下面。 1.第一步,阅读源代码借助最好可以跟踪工具去读,如sourceinsight。 我使用是windows7环境,又因为是c程序,故使用sourceinsight,当然还有其他方式
2016-05-20 10:37   [Redis]

如何阅读 Redis 源码

如何阅读 Redis 源码? 在这篇文章, 我将向大家介绍一种我认为比较合理 Redis 源码阅读顺序, 希望可以给对 Redis 有兴趣并打算阅读 Redis 源码朋友带来一点帮助。 第 1 步:阅读数据结构实现 刚开始阅读 Redis 源码时候, 最好从数据结构相关文件开始读起
2016-03-25 13:02   [Redis]

如何阅读DELPHI源码

最近在学习李维老师Inside VCL这本书 里面剖析了很多VCL设计模式 学习起来很过瘾 不过在阅读源码上觉得有点麻烦 按着CTRL只能到类定义而无法看到实现源码 每次阅读时候,只能到SOURCE\VCL下打开相应文件才能阅读源码 如何快速阅读源码
2014-01-03-11:05   [VCL组件开发]

求教,如何用eclipse看java标准源码

求教,如何用eclipse看java标准源码? 在百度上搜到办法不好用呐 求助=== 回复讨论(解决方案) 好吧我已经搞明白了=== 谁进来我就直接结贴啦== 你说是查看 .jar 文件,如果是你可以百度下一个 
2016-01-11 22:45   [JavaEclipse]

ros源码阅读

测试代码,使用xmlrpc与roscore通信 ros框架是使用rpc与server端通信,server维护topicpublisher,subscriber,param server,serviceServer import xmlrpclib server
2016-06-10 17:06   [其它]

  1  2  3  4  5 下一页>