首页 文章 精选 留言 我的

精选列表

搜索[Swift开发],共10011篇文章
优秀的个人博客,低调大师

iOS - Swift NSPoint 位置

前言 结构体,这个结构体用来表示事物的一个坐标点。 public typealias NSPoint = CGPoint public struct CGPoint { public var x: CGFloat public var y: CGFloat public init() public init(x: CGFloat, y: CGFloat) } extension CGPoint { public static var zero: CGPoint { get } public init(x: Int, y: Int) public init(x: Double, y: Double) } 1、NSPoint 结构体变量的创建与调用 // NSPoint 结构体变量的创建与赋值 // 先定义变量,再赋值 var point1:NSPoint = NSPoint() point1.x = 6; point1.y = 1; // Int 型值 let point2:NSPoint = NSPoint(x: 2, y: 5) // Double 型值 let point3:NSPoint = NSPoint(x: 2.1, y: 6.2) // CGFloat 型值 let point4:NSPoint = NSPoint(x: 2.2, y: 7.3) // 由方法创建 let point5:NSPoint = NSMakePoint(2.3, 8.4) // 由方法创建 let point6:NSPoint = CGPointMake(2.4, 9.5) // NSPoint 结构体变量值的调用 print("\(point1.x), \(point1.y)") 2、NSPoint 与 String 的相互转换 let point1:NSPoint = NSMakePoint(2.3, 8.4) // NSPoint 转 String let string:String = NSStringFromPoint(point1) // String 转 NSPoint let point:NSPoint = NSPointFromString(string)

优秀的个人博客,低调大师

iOS - Swift Set 集合

前言 Set:集合 public struct Set<Element : Hashable> : Hashable, CollectionType, ArrayLiteralConvertible public class NSSet : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NSFastEnumeration 集 NSSet 是一个无序对象的集合。集也有动态和静态之分,NSSet 是静态类型,成员不能被修改。NSMutableSet 是动态类型,成员可以被修改。 集和数组不一样的是,它存储的每一个元素都是唯一的,没有完全相同的两个元素。所以数组中如果有两个相同的值,转换为集后只会有一个值。 NSCountedSet:计数集合 public class NSCountedSet : NSMutableSet NSCountedSet 这种集合中同一对象可以出现多次,然而并非在集合中存放多次这个对象,而是维护一个次数计数。当第一次将对象添加到集合中时,对象的 count 值被置为 1,然后每次将这个对象添加到集合中,count 值就会增加 1,每次从集合中删除对象,count 值就会减 1.当对象的 count 值为零时,实际上对象本身就被删除了。 NSIndexSet:索引集合 public class NSIndexSet : NSObject, NSCopying, NSMutableCopying, NSSecureCoding public class NSMutableIndexSet : NSIndexSet NSIndexSet 这种集合用于存储有序的索引到某种数据结构,比如数组。 1、集合的 创建 // Set 型集合 // 不赋初值,指定数据类型为 String 型 let set1 = Set<String>() // 不指定数据类型,自动推断 let set2:Set = [1, 3, 5, 7] // 指定数据类型为 Int 型 let set3:Set<Int> = [1, 3, 5, 7] // NSSet 型集合 let swiftArr:Array = ["a", "b", "c"] let swiftSet:Set = [1, 2, 3, 4] // 创建一个空集合 let nsSet1:NSSet = NSSet() // 指定多个元素值 let nsSet2:NSSet = [2, 4, 6, 8] // 由 Array 型数组创建 let nsSet3:NSSet = NSSet(array:swiftArr) // 由 Set 型集合创建 let nsSet4:NSSet = NSSet(set: swiftSet) // 由 NSSet 型集合创建 let nsSet5:NSSet = NSSet(set: nsSet3) // 指定一个元素值 let nsSet6:NSSet = NSSet(object: 7) // 指定多个元素值 let nsSet7:NSSet = NSSet(objects: 2, 4, 6, 8) 2、集合成员 个数的计算 // Set 或 NSSet 型集合 let set:NSSet = [1, 3, 5, 7] let num:Int = set.count 3、集合元素的获取 // NSSet 型集合 let nsSet:NSSet = [2, 4, 6, 8] // 获取集合中指定的元素,不存在时返回 nil let object1:AnyObject? = nsSet.member(8) // 获取集合中随机的一个值,集合为空时返回 nil let objects1:AnyObject? = nsSet.anyObject() // 获取集合中所有的元素 let objects2:AnyObject = nsSet.allObjects 4、集合的比较 // Set 型集合 let swiftSet1:Set = [1, 3, 5, 7] let swiftSet2:Set = [5, 7, 9, 11] // 判断集合是否为空 let bl1:Bool = swiftSet1.isEmpty // 判断集合中是否包含某个元素 let bl2:Bool = swiftSet1.contains(7) // 相等,判断两个集合是否相等 let bl3:Bool = swiftSet1 == swiftSet2 // 子集,判断当前集合是否是指定集合的子集 let bl4:Bool = swiftSet1.isSubsetOf(swiftSet2) // 交集,返回当前集合与指定集合的交集,没有交集时返回一个空集合 let interSet:Set = swiftSet1.intersect(swiftSet2) // 并集,返回当前集合与指定集合的并集 let unionSet:Set = swiftSet1.union(swiftSet2) // NSSet 型集合 let nsSet1:NSSet = [2, 4, 6, 8] let nsSet2:NSSet = [6, 8, 10, 12] let nsSet3:NSMutableSet = [6, 8, 10, 12] // 判断集合中是否包含某个元素 let bl5:Bool = nsSet1.containsObject(8) // 相等,判断两个集合是否相等 let bl6:Bool = nsSet1 == nsSet2 // 相等,判断两个集合是否相等 let bl7:Bool = nsSet1.isEqualToSet(nsSet2 as Set) // 子集,判断当前集合是否是指定集合的子集 let bl8:Bool = nsSet1.isSubsetOfSet(nsSet2 as Set) // 交集,判断当前集合与指定集合是否有交集 let bl9:Bool = nsSet1.intersectsSet(nsSet2 as Set) // 交集,返回当前集合与指定集合的交集,返回到当前集合中 nsSet3.intersectSet(nsSet1 as Set) // 并集,返回当前集合与指定集合的并集,返回到当前集合中 nsSet3.unionSet(nsSet1 as Set) // 补集,返回当前集合与指定集合的补集,返回到当前集合中,当前集合中删除与指定集合的交集 nsSet3.minusSet(nsSet1 as Set) 5、集合元素的添加 // Set 型集合 var swiftSet:Set = [1, 3, 5, 7] // 向集合中添加一个元素 swiftSet.insert(8) // NSSet 型集合 let nsSet:NSMutableSet = [2, 4, 6, 8] // 向集合中添加一个元素 nsSet.addObject(10) // 向集合中添加一个数组 nsSet.addObjectsFromArray([11, 12, 12]) 6、集合元素的删除 // Set 型集合 var swiftSet:Set = [1, 3, 5, 7] // 删除第一个元素 swiftSet.removeFirst() // 删除指定元素 swiftSet.remove(1) // 删除所有元素 swiftSet.removeAll(keepCapacity: true) // NSSet 型集合 let nsSet:NSMutableSet = [2, 4, 6, 8] // 删除指定元素 nsSet.removeObject(4) // 删除指定集合,当前集合中删除与指定集合的交集 nsSet.minusSet([2, 6]) // 删除所有元素 nsSet.removeAllObjects() 7、集合元素的修改 // NSSet 型集合 let nsSet:NSMutableSet = [2, 4, 6, 8] nsSet.setSet([1, 2, 3]) 8、集合的遍历 // NSSet 型集合 let nsSet:NSSet = [2, 4, 6, 8] // 用闭包遍历 nsSet.enumerateObjectsUsingBlock { (obj:AnyObject, stop:UnsafeMutablePointer<ObjCBool>) in print(obj) } // 用迭代遍历 let enu:NSEnumerator = nsSet.objectEnumerator() // AnyObject 后不要加 ?,否则会导致一直循环 while let obj:AnyObject = enu.nextObject() { print(obj) } // 条件遍历 let set:Set = nsSet.objectsPassingTest { (obj:AnyObject, stop:UnsafeMutablePointer<ObjCBool>) -> Bool in return (obj as! Int) > 5 ? true : false } print(set) 9、计数集合的创建 let nsCountSet1:NSCountedSet = NSCountedSet() let nsCountSet2:NSCountedSet = NSCountedSet(capacity: 0) let nsCountSet3:NSCountedSet = NSCountedSet(array: [1, 3, 5, 7, 9]) let nsCountSet4:NSCountedSet = NSCountedSet(set: [6, 9]) let nsCountSet5:NSCountedSet = NSCountedSet(object: 8) let nsCountSet6:NSCountedSet = NSCountedSet(objects: [2, 3, 6, 8], count: 4) 10、计数集合元素的添加 let nsCountSet:NSCountedSet = [1, 3, 5, 7, 9] // 向集合中多次添加同一个元素,该元素的计数值增加 nsCountSet.addObject(6) 11、计数集合元素的删除 let nsCountSet:NSCountedSet = [1, 3, 5, 7, 9] // 从集合中删除元素,该元素的计数值减小 nsCountSet.removeObject(5) 12、计数集合计数值的计算 let nsCountedSet:NSCountedSet = NSCountedSet(array: [1, 2, 3]) nsCountedSet.addObject(2) nsCountedSet.removeObject(1) // 检索集合中指定元素的计数值 let num1:Int = nsCountedSet.countForObject(1) // 检索集合中指定元素的计数值 let num2:Int = nsCountedSet.countForObject(2) 13、索引集合的创建 let indexSet1:NSIndexSet = NSIndexSet() let indexSet2:NSIndexSet = NSIndexSet(index: 8) let indexSet3:NSIndexSet = NSIndexSet(indexSet: indexSet2) let indexSet4:NSIndexSet = NSIndexSet(indexesInRange: NSMakeRange(1, 8)) 14、索引集合元素数量的计算 let indexSet:NSIndexSet = NSIndexSet(indexesInRange: NSMakeRange(1, 8)) // 计算索引集合所有索引的数量 let num1:Int = indexSet.count // 计算索引集合中某一范围内的索引的数量 let num2:Int = indexSet.countOfIndexesInRange(NSMakeRange(3, 4)) 15、索引集合元素的获取 let indexSet:NSIndexSet = NSIndexSet(indexesInRange: NSMakeRange(1, 8)) // 获取索引集合中的第一个索引,如果集合为空则返回 NSNotFound let index1:Int = indexSet.firstIndex // 获取索引集合的最后一个索引,如果集合为空则返回 NSNotFound let index2:Int = indexSet.lastIndex // 获取索引集合中小于指定的索引且最接近的索引,如果没有小于的索引则返回 NSNotFound let index3:Int = indexSet.indexLessThanIndex(5) // 获取索引集合中小于等于指定的索引且最接近的索引,如果没有小于的索引则返回 NSNotFound let index4:Int = indexSet.indexLessThanOrEqualToIndex(5) // 获取索引集合中大于指定的索引且最接近的索引,如果没有大于的索引则返回 NSNotFound let index5:Int = indexSet.indexGreaterThanIndex(7) // 获取索引集合中大于等于指定的索引且最接近的索引,如果没有大于的索引则返回 NSNotFound let index6:Int = indexSet.indexGreaterThanOrEqualToIndex(7) 16、索引集合的判断 let indexSet:NSIndexSet = NSIndexSet(indexesInRange: NSMakeRange(1, 8)) // 判断索引集合中是否包含某个索引 let bl1:Bool = indexSet.containsIndex(9) // 判断一个索引集合中是否包含另一个索引集合 let bl2:Bool = indexSet.containsIndexes(NSIndexSet(indexesInRange: NSMakeRange(2, 3))) // 判断一个索引集合中是否包含某一个范围内的所有值 let bl3:Bool = indexSet.containsIndexesInRange(NSMakeRange(2, 3)) // 判断一个索引集合中是否包含某一个范围内的值(是否有交集) let bl4:Bool = indexSet.intersectsIndexesInRange(NSMakeRange(7, 3)) // 判断两个索引集合是否相等 let bl5:Bool = indexSet.isEqualToIndexSet(NSIndexSet(indexesInRange: NSMakeRange(1, 7))) 17、索引集合的添加 let mIndexSet:NSMutableIndexSet = NSMutableIndexSet(indexesInRange: NSMakeRange(1, 3)) // 添加一个索引元素,集合中已存在时会合并 mIndexSet.addIndex(6) // 添加一个索引集合,两个索引集合有交集时会合并 mIndexSet.addIndexes(NSIndexSet(indexesInRange: NSMakeRange(8, 2))) // 添加一个范围内的元素,有交集时会合并 mIndexSet.addIndexesInRange(NSMakeRange(12, 3)) 18、可变索引集合删除 let mIndexSet:NSMutableIndexSet = NSMutableIndexSet(indexesInRange: NSMakeRange(1, 10)) // 删除一个索引集合中的索引元素 mIndexSet.removeIndex(2) // 删除指定集合中含有的索引元素 mIndexSet.removeIndexes(NSIndexSet(indexesInRange: NSMakeRange(4, 2))) // 删除指定范围内含有的索引元素 mIndexSet.removeIndexesInRange(NSMakeRange(8, 3)) // 删除全部索引元素 mIndexSet.removeAllIndexes() 19、索引集合的遍历 let indexSet:NSIndexSet = NSIndexSet(indexesInRange: NSMakeRange(1, 5)) // 用闭包遍历 // 1. enumerateIndexesUsingBlock // 遍历获取索引集合的所有索引值 indexSet.enumerateIndexesUsingBlock { (idx:Int, stop:UnsafeMutablePointer<ObjCBool>) in print(idx) } // 2. enumerateRangesUsingBlock // 遍历获取索引集合的起始值和索引元素数量 indexSet.enumerateRangesUsingBlock { (range:NSRange, stop:UnsafeMutablePointer<ObjCBool>) in print("\(range.location), \(range.length)") } // 条件遍历 // 1. indexesPassingTest // 遍历索引集合,找出索引中所有满足条件的索引 let indexs:NSIndexSet = indexSet.indexesPassingTest { (idx, stop) -> Bool in return idx > 3 ? true : false } indexs.enumerateIndexesUsingBlock { (idx:Int, stop:UnsafeMutablePointer<ObjCBool>) in print(idx) } // 2. indexPassingTest // 遍历索引集合,找出索引中第一个满足条件的索引 let index:Int = indexs.indexPassingTest { (idx, stop) -> Bool in return idx > 3 ? true : false } print(index)

优秀的个人博客,低调大师

iOS - Swift Dictionary 字典

前言 public struct Dictionary<Key : Hashable, Value> : CollectionType, DictionaryLiteralConvertible public class NSDictionary : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NSFastEnumeration 字典用于存储无序的数据元素值,它可以存储任何类型的元素,甚至可以将数组作为字典的元素。 1、Dictionary 与 NSDictionary 的相互转换 Dictionary 与 NSDictionary 之间可以直接相互转换。Dictionary 转转成 NSDictionary 时,数组中的各项元素被转换为 AnyObject 类型。NSDictionary 转换成 Dictionary 时,数组中的各项元素也被转换为 AnyObject 类型。 let dictinoary:[String:String] = ["key1":"value1", "key2":"value"] // Dictionary 转 NSDictionary // Dictionary 转换成 NSDictionary<AnyObject, AnyObject> 型 let nsDictionary1:NSDictionary = dictinoary // Dictionary 转换成 NSDictionary<AnyObject, AnyObject> 型 let nsDictionary2:NSDictionary = dictinoary as NSDictionary // NSDictionary 转 Dictionary // NSDictionary 转换成 Dictionary<AnyObject, AnyObject> 型 let swiftDictionary1:Dictionary = nsDictionary1 as Dictionary // NSDictionary 转换成 Dictionary<String, String> 型 let swiftDictionary2:Dictionary = nsDictionary1 as! [String:String] 2、字典的 创建 // Dictionary 型字典 // 创建字典变量,指定数据类型为 Int 型 let dic1 = [String:Int]() // 创建字典变量,Dictionary<String, Int> 等价于 [String:Int] let dic2 = Dictionary<String, Int>() // 创建字典变量,不指定数据类型 let dic3:Dictionary = ["key1":1, "key2":2] // 创建字典变量,指定数据类型为 Int 型 let dic4:Dictionary<String, Int> = ["key1":1, "key2":2, "key3":3] // 创建字典变量,不指定数据类型 let dic5 = ["key1":1, "key2":2, "key3":3, "key4":4] // 创建指定数据类型的字典 let dic6:[String:Int] = ["key1":1, "key2":2, "key3":3, "key4":4] // 创建指定数据类型的字典 let dic7:[String:AnyObject] = ["key1":1, "key2":2, "key3":"value3", "key4":4] // NSDictionary 型字典 let swiftDictionary = ["key1":1, "key2":2, "key3":3, "key4":4] let nsdic1:NSDictionary = swiftDictionary let nsdic2:NSDictionary = swiftDictionary as NSDictionary let nsdic3:NSDictionary = NSDictionary(dictionary: swiftDictionary) let nsdic4:NSDictionary = NSDictionary(dictionary: ["key1":1, "key2":2, "key3":3, "key4":4]) let nsdic5:NSDictionary = NSDictionary(object: "nsdic5", forKey: "key1") let nsdic6:NSDictionary = NSDictionary(objects: ["nsdic6", 2], forKeys: ["key1", "key2"]) let nsdic7:NSDictionary = NSDictionary(dictionaryLiteral: ("key1", "nsdic7"), ("key2", 2), ("key3", 3), ("key4", 4)) // 从 文件 创建字符串 let nsdic8:NSDictionary? = NSDictionary(contentsOfFile: NSHomeDirectory() + "/Desktop/test.txt") // 从 Url 创建字符串 let nsdic9:NSDictionary? = NSDictionary(contentsOfURL: NSURL(fileURLWithPath: NSHomeDirectory() + "/Desktop/test.txt")) 3、字典元素个数的计算 // Dictionary 或 NSDictionary 型字典 let dic = ["key1":1, "key2":2, "key3":3, "key4":4] let num:Int = dic.count 4、通过 key 找对应的 value // Dictionary 型字典 var dic:Dictionary = ["key1":1, "key2":2, "key3":3, "key4":4] // 获取字典中指定 key 对应的值 let value1 = dic["key2"] // NSDictionary 型字典 let nsDic:NSDictionary = NSDictionary(dictionary: ["key1":1, "key2":2, "key3":3, "key4":4]) // 获取字典中指定 key 对应的值 let value2:AnyObject? = nsDic["key2"] // 获取字典中指定 key 对应的值 let value3:AnyObject? = nsDic.objectForKey("key2") // 获取字典中指定 key 对应的值,key 的值不存在时返回指定的字符串 let value4 = nsDic.objectsForKeys(["key3", "key4", "key5"], notFoundMarker: "not found") 5、通过 value 找对应的 key // NSDictionary 型字典 let nsDic:NSDictionary = NSDictionary(dictionary: ["key1":1, "key2":3, "key3":3, "key4":4]) let keys:AnyObject = nsDic.allKeysForObject(3) 6、字典中所有 key 的获取 // Dictionary 型字典 let dic:Dictionary = ["key1":1, "key2":2, "key3":3, "key4":4] let keys1 = dic.keys // NSDictionary 型字典 let nsDic:NSDictionary = NSDictionary(dictionary: ["key1":1, "key2":2, "key3":3, "key4":4]) let keys2 = nsDic.allKeys 7、字典中所有 value 的获取 // Dictionary 型字典 let dic:Dictionary = ["key1":1, "key2":2, "key3":3, "key4":4] let values1 = dic.values // NSDictionary 型字典 let nsDic:NSDictionary = NSDictionary(dictionary: ["key1":1, "key2":2, "key3":3, "key4":4]) let values2 = nsDic.allValues 8、字典键值对的 追加 // Dictionary 型字典 var dic:Dictionary = ["key1":1, "key2":2, "key3":3, "key4":4] // key 不存在时,追加键值对(key 值为新增的,若 key 值已存在则为修改对应的 value 值) dic["key5"] = 5 // NSDictionary 型字典 let nsDic:NSMutableDictionary = NSMutableDictionary(dictionary: ["key1":1, "key2":2, "key3":3, "key4":4]) // key 不存在时,追加键值对(key 值为新增的,若 key 值已存在则为修改对应的 value 值) nsDic["key5"] = 5 // 向字典末尾追加一个字典 nsDic.addEntriesFromDictionary(["key6":6, "key7":7]) 9、字典键值对的 修改 // Dictionary 型字典 var dic:Dictionary = ["key1":1, "key2":2, "key3":3, "key4":4] // key 存在时,修改其值 dic["key4"] = 100 // 修改指定的 key 对应的值 dic.updateValue(44, forKey: "key4") // NSDictionary 型字典 let nsDic:NSMutableDictionary = NSMutableDictionary(dictionary: ["key1":1, "key2":2, "key3":3, "key4":4]) // key 存在时,修改其值 nsDic["key3"] = 33 // 修改指定的 key 对应的值 nsDic.setObject(100, forKey: "key4") // 修改整个字典 nsDic.setDictionary(["key6":6, "key7":7]) 10、字典键值对的 删除 // Dictionary 型字典 var dic:Dictionary = ["key1":1, "key2":2, "key3":3, "key4":4] // 删除指定 key 对应的值 dic.removeValueForKey("key2") // 删除字典的所有元素 dic.removeAll(keepCapacity: true) // NSDictionary 型字典 let nsDic:NSMutableDictionary = NSMutableDictionary(dictionary: ["key1":1, "key2":2, "key3":3, "key4":4]) // 删除指定 key 对应的值 nsDic.removeObjectForKey("key2") // 删除指定 key 对应的值 nsDic.removeObjectsForKeys(["key1", "key4"]) // 删除字典的所有元素 nsDic.removeAllObjects() 11、字典遍历 // NSDictionary 型字典 let nsDic:NSDictionary = NSDictionary(dictionary: ["key1":1, "key2":2, "key3":3, "key4":4]) // for...in 循环 // 遍历出的为 key-value 的元组, key 不需要可以用 _ 替代 for (_, obj) in nsDic { print(obj) } // 闭包遍历 nsDic.enumerateKeysAndObjectsUsingBlock { (key:AnyObject, obj:AnyObject, stop:UnsafeMutablePointer<ObjCBool>) in print(obj) } // 迭代器遍历 // key 迭代器 let keyEnu:NSEnumerator = nsDic.keyEnumerator() while let key:AnyObject = keyEnu.nextObject() { print(nsDic.objectForKey(key)) } // 对象迭代器 let objEnu:NSEnumerator = nsDic.objectEnumerator() while let obj:AnyObject = objEnu.nextObject() { print(obj) } 12、字典排序 // NSDictionary 型字典 let nsDic:NSDictionary = NSDictionary(dictionary: ["key1":"value1", "key2":"value2", "key3":"value3", "key4":"value4"]) // 用闭包排序 let keys1 = nsDic.keysSortedByValueUsingComparator { (obj1:AnyObject, obj2:AnyObject) -> NSComparisonResult in return (obj1 as! String).compare(obj2 as! String) } for key in keys1 { print(nsDic.objectForKey(key)) } // 用指定的方法排序 let keys2 = nsDic.keysSortedByValueUsingSelector(#selector(NSNumber.compare(_:))) for key in keys2 { print(nsDic.objectForKey(key)) }

优秀的个人博客,低调大师

iOS - Swift NSData 数据

前言 public class NSData : NSObject, NSCopying, NSMutableCopying, NSSecureCoding public class NSMutableData : NSData NSData 和它的可变长子类 NSMutableData 是字节缓冲区的对象化封装。我们可以获得简单缓冲区,并进行一些转换操作。通常我们并不会直接创建字节数据,而是从其他类型的内容转换成字节数据。 所谓简单缓冲区,就是缓冲区内只包含数据,无内嵌指针。 1、NSData 的创建 // 由字符串创建 let swiftString:String = "Hello World" let nsString:NSString = "hello world" // allowLossyConversion 表示在转换过程中是否允许字符进行必要的删减或者替换 let data1:NSData? = swiftString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true) let data2:NSData? = nsString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true) // 由已知数据创建,两个对象的地址不相同 let data3:NSData = NSData(data: data1!) // 由文件创建 let data4:NSData? = NSData(contentsOfFile: NSHomeDirectory().stringByAppendingString("/Desktop/test.txt")) // 由 URL 创建 let data5:NSData? = NSData(contentsOfURL: NSURL(string: "http://www.baidu.com")!) // 可变 Data 的创建 // 初始化时指定对象拥有的字节空间大小,在需要时会增加内存空间,在初始化时并没有分配内存空间 let data6:NSMutableData? = NSMutableData(capacity: 0) // 初始化时为对象分配指定长度的归零字节 let data7:NSMutableData? = NSMutableData(length: 10) 2、数据的长度 let data1:NSData = "Hello World".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)! // 指定空间大小,不分配空间 let data2:NSMutableData = NSMutableData(capacity: 10)! // 分配指定长度的归零字节 let data3:NSMutableData = NSMutableData(length: 10)! // 字节长度的计算,NSData 的 length 属性是只读的,字节长度的计算,NSMutableData 的 length 可以被重新赋值 let num1:Int = data1.length let num2:Int = data2.length let num3:Int = data3.length // 重新设置空间的大小,对象的字节空间会相应的扩充或者截断。如果新设置的大小大于当前大小, // 会在当前数据的末尾处用归零字节来进行填充。如果新设置的大小小于当前大小,数据会被截断抛弃。 data2.length = 5 data3.length = 5 // 扩充指定长度,新添加的空间被设置为归零字节 data2.increaseLengthBy(7) data3.increaseLengthBy(7) 3、数据的获取 let data:NSData = "Hello World".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)! // 默认为内容数据的十六进制编码 let dataFromNSData1 = data.description let dataFromNSData2:NSString? = NSString(data: data, encoding: NSUTF8StringEncoding) let dataFromNSData3:NSString? = NSString(bytes: data.bytes, length: data.length, encoding: NSUTF8StringEncoding) 4、NSData 的比较 let data1:NSData = "Hello World".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)! let data2:NSData = NSData(data: data1) // 比较两个对象的地址是否一致 let bl1:Bool = data1 === data2 // 比较两个对象的长度及每字节的数据是否相同 let bl2:Bool = data1.isEqualToData(data2) 5、NSData 的存储 let data:NSData = "Hello World".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)! // 将数据写入 file let bl1:Bool = data.writeToFile(NSHomeDirectory().stringByAppendingString("/Desktop/test.txt"), atomically: true) // 将数据写入 URL,该方法只支持 file:// 路径的文件写入,并不能对远程如 http:// 等类型文件进行写入 let bl2:Bool = data.writeToURL(NSURL(string: "file://".stringByAppendingFormat("%@%@", NSHomeDirectory(), "/Desktop/test.txt"))!, atomically: true) 6、NSData 与 字符串 的相互转换 let string:String = "Hello World" // 字符串 转 NSData let data:NSData = string.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)! // NSData 转 字符串 let utf8String:NSString = NSString(data: data, encoding: NSUTF8StringEncoding)! 7、NSData 与 Base64编码字符串 的相互转换 let data:NSData = "Hello World".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)! // NSData 转换为 Base64编码的字符串 let base64String:String = data.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0)) // Base64编码的字符串 转换为 NSData let nsData:NSData? = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions(rawValue: 0))

优秀的个人博客,低调大师

iOS - Swift NSSize 尺寸

前言 结构体,这个结构体用来表示事物的宽度和高度。 public typealias NSSize = CGSize public struct CGSize { public var width: CGFloat public var height: CGFloat public init() public init(width: CGFloat, height: CGFloat) } extension CGSize { public static var zero: CGSize { get } public init(width: Int, height: Int) public init(width: Double, height: Double) } 1、NSSize 结构体变量的创建与调用 // NSSize 结构体变量的创建与赋值 // 先定义变量,再赋值 var size1:NSSize = NSSize() size1.width = 6; size1.height = 1; // Int 型值 let size2:NSSize = NSSize(width: 2, height: 5) // Double 型值 let size3:NSSize = NSSize(width: 2.1, height: 6.2) // CGFloat 型值 let size4:NSSize = NSSize(width: 2.2, height: 7.3) // 由方法创建 let size5:NSSize = NSMakeSize(2.3, 8.4) // 由方法创建 let size6:NSSize = CGSizeMake(2.4, 9.5) // NSSize 结构体变量值的调用 print("\(size1.width), \(size1.height)") 2、NSSize 与 String 的相互转换 let size1:NSSize = NSMakeSize(2.3, 8.4) // NSSize 转 String let string:String = NSStringFromSize(size1) // String 转 NSSize let size:NSSize = NSSizeFromString(string)

优秀的个人博客,低调大师

iOS - Swift NSValue 值

前言 public class NSValue : NSObject, NSCopying, NSSecureCoding 将任意数据类型包装成对象。 1、比较两个 NSValue 类型数据的大小 let value1:NSValue = NSValue(point: NSMakePoint(10, 32)) let value2:NSValue = NSValue(point: NSMakePoint(10, 32)) let bl1:Bool = value1 == value2 let bl2:Bool = value1.isEqualToValue(value2) 2、NSValue 与 OC 数据类型的相互转换 // OC 转 NSValue let value:NSValue = NSValue(point: NSMakePoint(10, 32)) // NSValue 转 OC let point:NSPoint = value.pointValue

优秀的个人博客,低调大师

iOS - Swift NSCalendar 日历

前言 public class NSCalendar : NSObject, NSCopying, NSSecureCoding NSCalendar 对世界上现存的常用的历法进行了封装,既提供了不同历法的时间信息,又支持日历的计算。 NSCalendar -- 日历类,它提供了大部分的日期计算接口,并且允许您在 NSDate 和 NSDateComponents 之间转换 NSTimeZone -- 时区信息 NSLocale -- 本地化信息 NSDate -- 表示一个绝对的时间点 NSDateComponents -- 一个封装了具体年月日、时秒分、周、季度等的类 NSDateFormatter -- 用来在日期和字符串之间转换 firstWeekday 大家在使用 dateComponents.weekday 获取某天对应的星期时,会发现,星期日对应的值为 1,星期一对应的值为 2,星期二对应的值为 3,依次递推,星期六对应的值为 7,这与我们平时理解的方式不一样。然后,我们就开始找是不是可以设置这种对应关系。终于,我们在 NSCalendar 中发现了 firstWeekday 这个变量,从字面意思上看貌似就是我们寻找的那个东西。可是,设置过 firstWeekday 后,我们又发现完全没有作用,真是郁闷啊!其实,大家不必郁闷,因为郁闷也没用,iOS 中规定的就是周日为 1,周一为 2,周二为 3,周三为 4,周四为 5,周五为 6,周六为 7,无法通过某个设置改变这个事实的,只能在使用的时候注意一下这个规则了。那 firstWeekday 是干什么用的呢?大家设置一下 firstWeekday,再获取一下 dateComponents.weekOfYear 或 dateComponents.weekOfMonth,看看返回的数据是否发生了变化。firstWeekday 的作用确实是修改当前历法中周的起始位置,但是不能修改周日对应的数值,只能修改一年或一个月中周的数量,以及周的次序。 1、日历的创建 // 根据提供的日历标示符初始化。 /* identifier 的范围可以是: NSCalendarIdentifierGregorian 公历 NSCalendarIdentifierBuddhist 佛教日历 NSCalendarIdentifierChinese 中国农历 NSCalendarIdentifierHebrew 希伯来日历 NSCalendarIdentifierIslamic 伊斯兰日历 NSCalendarIdentifierIslamicCivil 伊斯兰教日历 NSCalendarIdentifierJapanese 日本日历 NSCalendarIdentifierRepublicOfChina 中华民国日历(台湾) NSCalendarIdentifierPersian 波斯历 NSCalendarIdentifierIndian 印度日历 NSCalendarIdentifierISO8601 ISO8601 */ let cal1:NSCalendar? = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian) // 返回当前客户端的逻辑日历 /* 取得的值会一直保持在 cache 中,第一次用此方法实例化对象后,即使修改了系统日历设定,这个对象也不会改变 */ let cal2:NSCalendar = NSCalendar.currentCalendar() // 返回当前客户端的逻辑日历 /* 当每次修改系统日历设定,其实例化的对象也会随之改变。 */ let cal3:NSCalendar = NSCalendar.autoupdatingCurrentCalendar() 2、日历的设置 let calendar:NSCalendar = NSCalendar.currentCalendar() // 设置区域 calendar.locale = NSLocale(localeIdentifier: "zh_CN") // 设置时区 /* 设置时区,设置为 GMT+8,即北京时间(+8) */ calendar.timeZone = NSTimeZone(abbreviation: "EST")! calendar.timeZone = NSTimeZone(forSecondsFromGMT: +28800) // 设定每周的第一天从星期几开始 /* 1 代表星期日开始,2 代表星期一开始,以此类推。默认值是 1 */ calendar.firstWeekday = 2 // 设置每年及每月第一周必须包含的最少天数 /* 设定第一周最少包括 3 天,则 value 传入 3 */ calendar.minimumDaysInFirstWeek = 3 3、日历设置信息的获取 let calendar:NSCalendar = NSCalendar.currentCalendar() // 获取日历标示符 /* 有效的日历标示符包括: gregorian buddhist chinese hebrew islamic islamic-civil japanese roc persian indian iso8601 */ let calendarIdentifier = calendar.calendarIdentifier // 获取地区信息 let localeIdentifier1 = calendar.locale?.localeIdentifier let localeIdentifier2: AnyObject? = calendar.locale?.objectForKey(NSLocaleIdentifier) // 获取时区信息 let timeZone = calendar.timeZone // 获取每周的第一天从星期几开始 let firstWeekday = calendar.firstWeekday // 获取第一周必须包含的最少天数 let minimumDaysInFirstWeek = calendar.minimumDaysInFirstWeek 4、日历信息的获取 let calendar:NSCalendar = NSCalendar.currentCalendar() 1)获取一个小的单位在一个大的单位里面的序数 let count = calendar.ordinalityOfUnit(NSCalendarUnit.Weekday, inUnit: NSCalendarUnit.WeekOfMonth, forDate: NSDate()) public func ordinalityOfUnit(smaller: NSCalendarUnit, inUnit larger: NSCalendarUnit, forDate date: NSDate) -> Int NSCalendarUnit包含的值有: Era -- 纪元单位。对于 NSGregorianCalendar (公历)来说,只有公元前(BC)和公元(AD);而对于其它历法可能有很多, 例如日本和历是以每一代君王统治来做计算。 Year -- 年单位。值很大,相当于经历了多少年,未来多少年。 Month -- 月单位。范围为1-12 Day -- 天单位。范围为1-31 Hour -- 小时单位。范围为0-24 Minute -- 分钟单位。范围为0-60 Second -- 秒单位。范围为0-60 Weekday -- 星期单位,每周的7天。范围为1-7 WeekdayOrdinal -- 没完全搞清楚 Quarter -- 几刻钟,也就是15分钟。范围为1-4 WeekOfMonth -- 月包含的周数。最多为6个周 WeekOfYear -- 年包含的周数。最多为53个周 YearForWeekOfYear -- 没完全搞清楚 Nanosecond -- 微妙 Calendar -- TimeZone -- 没完全搞清楚 <1>、当小单位为 NSCalendarUnitWeekday,大单位为 NSCalendarUnitWeekOfMonth / NSCalendarUnitWeekOfYear 时 (即某个日期在这一周是第几天),根据 firstWeekday 属性不同,返回的结果也不同。具体说明如下: 当 firstWeekday 被指定为星期天(即 = 1)时,它返回的值与星期几对应的数值保持一致。比如: fromDate 传入的参数是星期日,则函数返回 1 fromDate 传入的参数是星期一,则函数返回 2 当 firstWeekday 被指定为其它值时(即 <> 1)时,假设firstWeekday 被指定为星期一(即 = 2),那么: fromDate 传入的参数是星期一,则函数返回 1 fromDate 传入的参数是星期二,则函数返回 2 fromDate 传入的参数是星期日,则函数返回 7 <2>、当小单位为 参数为 NSCalendarUnitWeekOfMonth / NSCalendarUnitWeekOfYear,大单位为 NSCalendarUnitYear 时 (即某个日期在这一年中是第几周),minimumDaysInFirstWeek 属性影响它的返回值。具体说明如下: 2005年1月 日 一 二 三 四 五 六 -------------------------------- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 2005年1月第一周包括1号。 a. 如果将 minimumDaysInFirstWeek 设定 = 1 则 fromDate 传入1月1号,方法均返回1 ==> 满足 minimumDaysInFirstWeek 指定的天数(最少1天),所以方法将其归为 2005年的第1周 则 fromDate 传入1月2-8号,方法均返回2 则 fromDate 传入1月9-15号,方法均返回3 ...... b. 如果将 minimumDaysInFirstWeek 设定为 > 1,比如2 则 fromDate 传入1月1号,方法均返回53 ==> 不足2天,所以方法将其归为2004年的第53周 则 fromDate 传入1月2-8号,方法均返回1 则 fromDate 传入1月9-15号,方法均返回2 ...... 2008年1月 日 一 二 三 四 五 六 --------------------------------- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 2005年1月第一周包括1-5号共5天。 a. 如果将 minimumDaysInFirstWeek 设定为 <= 5时 则 fromDate 传入1月1-5号,方法均返回1 ==> 满足 minimumDaysInFirstWeek 指定的天数,所以方法将其归为 2008年的第1周 则 fromDate 传入1月6-12号,方法均返回2 则 fromDate 传入1月13-19号,方法均返回3 ...... b. 如果将 minimumDaysInFirstWeek 设定为 > 5,比如6 则 fromDate 传入1月1-5号,方法均返回53 ==> 当周不足6天,所以方法将其归为2007年的第53周 则 fromDate 传入1月2-8号,方法均返回1 则 fromDate 传入1月9-15号,方法均返回2 ...... <3>、当小单位为 参数为 NSCalendarUnitWeekOfMonth / NSCalendarUnitWeekOfYear,大单位为 NSCalendarUnitMonth 时 (即某个日期在这一个月中是第几周),minimumDaysInFirstWeek 属性影响它的返回值。具体说明如下: 2008年4月 日 一 二 三 四 五 六 --------------------------------- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 2008年4月第一周包括1、2、3、4、5号。 a. 如果将 minimumDaysInFirstWeek 设定为小于或等于5的数 则 fromDate 传入4月1-5号,方法均返回1 则 fromDate 传入4月6-12号,方法均返回2 则 fromDate 传入4月13-19号,方法均返回3 .... b. 如果将 minimumDaysInFirstWeek 设定为大于5的数 则 fromDate 传入1-5号,方法均返回0 则 fromDate 传入6-12号,方法均返回1 则 fromDate 传入13-19号,方法均返回2 .... 2)获取一个小的单位在一个大的单位里面的取值范围 let range = calendar.rangeOfUnit(NSCalendarUnit.Day, inUnit: NSCalendarUnit.Month, forDate: NSDate()) public func rangeOfUnit(smaller: NSCalendarUnit, inUnit larger: NSCalendarUnit, forDate date: NSDate) -> NSRange 调用这个方法要明确一点,取得的是"范围"而不是"包含",下面是一些例子: <1>、小单位是 NSCalendarUnitDay,大单位是 NSCalendarUnitYear,并不是要取这一年包含多少天,而是要取"天"(Day)这个单位 在这一年(Year)的取值范围。其实不管你提供的日期是多少,返回的值都是"1--31"。 <2>、小单位是 NSCalendarUnitDay,大单位是 NSCalendarUnitMonth。要取得参数时间点所对应的月份下,"天"(Day)的取值范围。 根据参数时间的月份不同,值也不同。例如2月是1--28、3月是1--31、4月是1--30。 <3>、小单位是 NSCalendarUnitWeekOfMonth / NSCalendarUnitWeekOfYear,大单位是 NSCalendarUnitMonth。要取得参数时间点 所对应的月份下,"周"(Week)的取值范围。需要注意的是结果会受到 minimumDaysInFirstWeek 属性的影响。在默认 minimumDaysInFirstWeek 情况下,取得的范围值一般是"1--5",从日历上可以看出来这个月包含5排,即5个周。 <4>、小单位是 NSCalendarUnitDay,大单位是 NSCalendarUnitWeekOfMonth / NSCalendarUnitWeekOfYear。要取得周所包含 的"天"(Day)的取值范围。下面是一个示例日历图: 2013年4月 日 一 二 三 四 五 六 --------------------------------- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 在上图的日期条件下,假如提供的参数是4月1日--4月6日,那么对应的 week 就是1(第一个周),可以看到第一个周包含有6天, 从1号开始,那么最终得到的范围值为1--6。 假如提供的参数是4月18日,那么对应的 week 是3(第三个周),第三个周包含有7天,从14号开始,那么最终得到的范围值是14--7。 假如提供的参数是4月30日,那么对应的 week 是5(第五个周),第五个周只包含3天,从28号开始,那么最终得到的范围值是28--3。 3)获取所在日历单位的开始时间及秒数 var startDate:NSDate? = nil var intervalCount:NSTimeInterval = 0 let bl:Bool = calendar.rangeOfUnit(NSCalendarUnit.Month, startDate: &startDate, interval: &intervalCount, forDate: NSDate())

优秀的个人博客,低调大师

iOS - Swift NSTimeZone 时区

前言 public class NSTimeZone : NSObject, NSCopying, NSSecureCoding NSTimeZone 表示时区信息。 1、NSTimeZone 时区的创建 // 根据时区名称创建 let zone1:NSTimeZone? = NSTimeZone(name: "America/Chicago") // 根据时区缩写创建 let zone2:NSTimeZone? = NSTimeZone(abbreviation: "EST") // 根据零时区的秒数偏移量创建,+28800 为 GMT+8,即北京时间(+8) let zone3:NSTimeZone = NSTimeZone(forSecondsFromGMT: +28800) 2、NSTimeZone 时区的设置 // 设置默认的时区 NSTimeZone.setDefaultTimeZone(NSTimeZone(name: "America/Chicago")!) let defaultZone = NSTimeZone.defaultTimeZone() let systemZone = NSTimeZone.systemTimeZone() // 本地时区可以被修改,而系统时区不能修改 let localZone = NSTimeZone.localTimeZone() // NSCalendar 设置时区 let calendar:NSCalendar = NSCalendar.currentCalendar() // 设置时区,设置为 GMT+8,即北京时间(+8) calendar.timeZone = NSTimeZone(abbreviation: "EST")! // 设置时区,设置为 GMT+8,即北京时间(+8) calendar.timeZone = NSTimeZone(forSecondsFromGMT: +28800) // NSDateFormatter 设置时区 let formatter:NSDateFormatter = NSDateFormatter() formatter.timeZone = NSTimeZone(forSecondsFromGMT: +28800) 3、NSTimeZone 时区的获取 // 获取系统时区 let systemZone = NSTimeZone.systemTimeZone() // 获取本地时区 let localZone = NSTimeZone.localTimeZone() // 获取默认时区 let defaultZone = NSTimeZone.defaultTimeZone() 4、获取时区的名称 // 获取所有已知的时区名称 let zoneNames = NSTimeZone.knownTimeZoneNames() // 获取指定时区的名称 let localZoneName = NSTimeZone.localTimeZone().name 5、获取时区的缩写 // 获取所有已知的时区缩写 let zoneAbbreviations = NSTimeZone.abbreviationDictionary() // 获取指定时区的缩写 let localZoneAbbreviation = NSTimeZone.localTimeZone().abbreviation // 获取指定时间所在时区名称缩写 let dateLocalAbbreviation = NSTimeZone.localTimeZone().abbreviationForDate(NSDate()) 6、获取与零时区的间隔秒数 let zone = NSTimeZone.localTimeZone() // 获取当前时区与零时区的间隔秒数 let seconds1 = zone.secondsFromGMT // 获取指定时间所在时区与零时区的间隔秒数 let seconds2 = zone.secondsFromGMTForDate(NSDate()) 7、时区差值转换 // 得到当前时间(世界标准时间 UTC/GMT) var date:NSDate = NSDate() // 设置系统时区为本地时区 let zone:NSTimeZone = NSTimeZone.systemTimeZone() // 计算本地时区与 GMT 时区的时间差 let second:Int = zone.secondsFromGMT // 在 GMT 时间基础上追加时间差值,得到本地时间 date = date.dateByAddingTimeInterval(NSTimeInterval(second))

资源下载

更多资源
Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册