[Swift 开发] 深拷贝一个UILabel
发布时间:2020-12-14 06:16:19 所属栏目:百科 来源:网络整理
导读:深拷贝一个UILabel 原理还是用到runtime的反射机制和NSCopying协议. extension UILabel:NSCopying{ public func copy(with zone: NSZone? = nil) - Any { let label = UILabel() var outCount:UInt32 var propertyArray:[NSString] = [NSString]() outCount
深拷贝一个UILabel 原理还是用到runtime的反射机制和NSCopying协议. extension UILabel:NSCopying { public func copy(with zone: NSZone? = nil) -> Any { let label = UILabel() var outCount:UInt32 var propertyArray:[NSString] = [NSString]() outCount = 0 let peopers:UnsafeMutablePointer<objc_property_t?>! = class_copyPropertyList(UILabel.classForCoder(),&outCount) let count:Int = Int(outCount); for i in 0...(count - 1) { let method = peopers[i] let sel = method_getName(method) let methodName = sel_getName(sel) if let name = methodName { let na:NSString = NSString.init(utf8String: name)! propertyArray.append(na); } } // 不要忘记释放内存,否则C语言的指针很容易成野指针的 free(peopers) for i in 8...(count - 6) { let name = propertyArray[i] let value = self.value(forKey: name as String) label.setValue(value,forKey: name as String) } return label } } 调用 let labelA = UILabel() let labelB = labelA.copy() as! UILabel同理也可以深拷贝其他类型 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |