swift
Swift学习笔记--Array篇
Swift利用反射获取对象属性列表 good
class SuperClass: NSObject { var name:String = "zym_chen" var qq: String = "625271562" } class SubClass: SuperClass { var age:Int = 1 var sex:Bool = true class func test() { let obj: SubClass = SubClass() let morror = Mirror.init(reflecting: obj) let superMorror = Mirror.init(reflecting: obj).superclassMirror for (name, value) in (superMorror?.children)! { print("父类属性名:\(name) 值: \(value)") } for (name, value) in (morror.children) { print("子类属性名:\(name) 值: \(value)") } } } // 打印结果: 父类属性名:Optional("name") 值: zym_chen 父类属性名:Optional("qq") 值: 625271562 子类属性名:Optional("age") 值: 1 子类属性名:Optional("sex") 值: true
Swift获取对象(Object)类型(Class)
Swift常用内置函数介绍
Swift中结构体(Struct)和类(Class)的区别
苹果发布Xcode 7.3,Swift更新至2.2版本
Swift Mirror 类型实践 —— 快速将类转换为 Json
Swift反射API及其用法 好详细
Swift json字典转模型 项目记录 简洁
Swift开发第二篇——extension及fatalError
上面的数组长度为3,如果我们在开发过程中由于某些原因,在使用上面的数组时写成了 array[100] 就会报数组越界错误,程序崩溃。
在 OC 中数组越界输出的错误信息为:*** Terminating app due to uncaught exception 'NSRangeException',reason: '*** -[__NSArrayI objectAtIndex:]:index 100 beyond bounds [0 .. 2]'
在 Swift 中为 fatal error: Array index out of range
在调试时我们可以用断言来排除类似这样的问题,但是断言只会在 Debug 环境中有效,而在 Release 编译中所以变得断言都将被禁用。所以我们会考虑以产生致命错误(fatalError)的方式来种植程序
KVC之-setValue:forKey:方法实现原理与验证
没想到Swift里KVC还能有坑
view.setValue(UIViewTintAdjustmentMode.automatic.rawValue, forKey: "tintAdjustmentMode")
你TM能不能告诉我xcode7.0的是swift什么版本
xcode7.3 - swift2.2
xcode 7 beta - swift2.0
xcode 6才开始支持swift
swift版本对应Xcode版本
Swift 1.0-------Xcode 6
Swift 1.1-------Xcode 6.1.1
Swift 1.2-------Xcode 6.3
Swift 2.0-------Xcode 7.0
Swift 2.1-------Xcode 7.1
Swift 2.1.1-----Xcode 7.2
Swift 2.2-------Xcode 7.3
使用Swift 字典模型互转 就是这么简单 good
Dict2Model_Demo
swift 3.0 json解析、字典转模型三种方案
1.第一种是自带的字典转模型,自带的需要实现系统的setValue方法,然后自己还要实现dictToModel方法即可解析,这里我已经实现好了
2.第二种是采用swiftyJson,当然swiftyJson也可以直接解析, 结合 MJextension组合解析
3、第三种就是直接用MJExtension解析,如果你还对oc的MJExtension念念不让,在swift 3.0中只需要桥接就可以使用了,具体桥接方法只需直接将MJExtesnsion文件拖入swift工程中,系统会自动帮你生成一个桥接文件
Swift学习笔记(三十一)——参数的默认值
如果一个参数有默认值,那么在调用的时候就不一定需要传入参数,可以使用默认值
round:如果参数是小数,则求本身的四舍五入。
Swift 4.0:访问级别(访问控制)
swift public、internal和private
-
public
。可以访问自己模块中的任何public
实体。如果使用import
语句引入其他模块,我们可以访问其他模块中的public
实体。 -
internal
。只能访问自己模块的任何internal
实体,不能访问其他模块中的internal
实体。internal
可以省略,换句话说,默认访问限定是internal
。 -
private
。只能在当前源文件中使用的实体,称为私有实体。使用private
修饰,可以用作隐藏某些功能的实现细节
Swift - 访问控制(fileprivate,private,internal,public,open) good
去空格 whitespaceAndNewlineCharacterSet和过滤字符串
NSCharacterSet
swift Set(集合)
let oddDigits: Set = [1, 3, 5, 7, 9]
let evenDigits: Set = [0, 2, 4, 6, 8]
let singleDigitPrimeNumbers: Set = [2, 3, 5, 7]
oddDigits.union(evenDigits).sort()
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
oddDigits.intersect(evenDigits).sort()
关于 Swift 中的 Array.contains 方法
另外,contains 函数还提供了另外一种参数重载,也可以叫做 predicate
模式,方法签名如下:
contains(predicate: (Self.Generator.Element) throws -> Bool )
这个方法接受一个闭包类型的参数,这个闭包的作用就是用来判断某个元素是否符合我们的判断条件,然后返回相应的 Bool 值。比如这样:
let numbers = [1,2,3,4,5,6,7];
numbers.contains { (element) -> Bool in
if element % 3 == 0 {
return true
}else {
return false
}
}
swift编码出现Call can throw, but it is not marked with***错误的解决
func getThunbImage(url: NSURL) -> (UIImage) { let asset: AVURLAsset = AVURLAsset(URL: url, options: nil) let gen: AVAssetImageGenerator = AVAssetImageGenerator(asset: asset) gen.appliesPreferredTrackTransform = true let time: CMTime = CMTimeMakeWithSeconds(0, 1) var actualTime: CMTime = CMTimeMake(0, 0) var thumb: UIImage = UIImage() do { let image: CGImageRef = try gen.copyCGImageAtTime(time, actualTime: &actualTime) thumb = UIImage(CGImage: image) } catch { } return thumb }
窥探 Swift 之数组与字典
Void removeAll(): 移除数组中全部元素,有一个可选参数,keepCapacity。如果keepCapacity = YES的话,那么数组移除元素后,其存储空间还是存在的,在此往里存储值,不需再给他分配存储空间了。如果keepCapacity=NO的话,那么数组的存储空间就会被回收掉。
【iOS】Swift3 Swift2 String转int,从TextField里面获取Int类型的数值
从Swift2开始,.toInt()方法就被移除了,现在转Int只需要这样写:
String s = "123"
let myInt = Int(s)
如果从TextField里面获取Int类型的数值,只需要:
let myInt = Int(mytextfield.text!)
IOS Int 转NSNumber NSString转int
Swift - AnyClass,元类型和 .self
Swift - 关键字(typealias、associatedtype)
Swift - 析构过程(Deinitialization)
Swift 类型的检査与转换(is,as,AnyObject,Any)
if fruit is Apple
Alamofire网络库基础教程:使用 Alamofire 轻松实现 Swift 网络请求
swift中,as!与as?有什么区别?
选项形式(as?)的操作执行转换并返回期望类型的一个选项值,如果转换成功则返回的选项包含有效值,否则选项值为 nil 强制形式(as )的操作执行一个实例到目的类型的强制转换,因此使用该形式可能触发一个运行时错误。
Swift 学习之二十一:?和 !(详解)
// optional binding
// 如果strValue == nil, 那么结果就是nil,不会调用String的hasValue
// 如果strValue != nil, 就返回strValue对应的hashValue值并赋值给常量hashValue
if let hashValue = strValue?.hashValue {
// do something if neccessary
}
使用!来声明变量,会成为隐式强拆包可选类型,这表示这个类型永远不会出现nil的情况,但一旦出来,在调用时就会崩溃。
初探swift语言的学习—Object-C与Swift混编
用桥接文件 targets->build settings ->Object-C Bridging Header
- 构建设计模式:Singleton。
- 架构设计模式:MVC,Decorator,Adapter,Facade 外观模式Facade(结构型) 。
- 行为设计模式:Observer,Memento 备忘录模式。
The Swift Programming Language 中文版
Swift开发语法 简书
- 从OC转换为Swift的规律: alloc initXXX --> (xxxx:)
OC: [[UIView alloc] init] -- [[UIView alloc] initWithFrame:]
Swift: UIView() -- UIView(frame: )
- 分号
- 在OC中每一条语句后面必须跟上一个;, Swift中如果一行只有一条语句, 那么;可以省略
- 调用方法
OC: [UIColor redColor];
Swift: UIColor.redColor()
var
定义变量,设置之后可以修改let
定义常量,设置之后不可以修改- 语句末尾不用使用
;
- 在 Swift 中使用
print()
替代 OC 中的NSLog
print
的性能更好
Swift
是对类型要求非常严格的一门语言,一个值永远不会被自动转换成其他类型
- 在Swift开发中, 一般情况下先用let, 只要需要修改数据时才用var, 使用let的好处, 可以避免数据被修改, 可以保证数据安全性
OC中有显示转换和隐式转换 double value = 10.1 + 9
Swift中只有显示转换没有隐式转换, 也就是说只有相同类型的数据才能进行赋值和计算
- 只要将多个相同或者不同的数据用()括起来就是元祖
- 优点: 在以前没有元祖之前C和OC语言是通过传入指针或者返回结构体的方式来返回多个值的,而有了元祖之后就可以实现让一个函数返回多个值
什么是可选类型:
一个变量可以有值也可以没有值, 我们就称之为可选类型
- 在Swift中如果使用一个可选类型的变量/常量, 必须解包操作
- 解包: 只需要在变量/常量后面加上 !
- !含义: 代表告诉系统该变量/常量中一定有值, 如果强制解包一个没有值的常量/变量,那么会报错
如果有 ?
表示改方法有可能无法实例化到正确的对象
??
是一个非常有用的操作符,能够快速对nil
进行判断- 如果对象是
nil
,则使用??
后面的值代替前面的nil
值参与计算
单例: static let shareInstance: NetworkTools = NetworkTools()