Swift 之Protocol在cocoa中的使用范例搜集(一)

protocol Reusable: class {
    static var reuseIndentifier: String {get}
    static var nib: UINib? {get}
}

extension Reusable {
    static var reuseIndentifier: String { return String(Self) }
    static var nib: UINib? { return nil }
}

extension UITableView {

    func registerReusableCell<T: UITableViewCell where T: Reusable>(_: T.Type) {
        if let nib = T.nib {
            self.registerNib(nib, forCellReuseIdentifier: T.reuseIndentifier)
        }else {
            self.registerClass(T.self , forCellReuseIdentifier: T.reuseIndentifier)
        }
    }

    func dequeueReusableCell<T: UITableViewCell where T: Reusable>(indexpath : NSIndexPath) -> T {
        return self.dequeueReusableCellWithIdentifier(T.reuseIndentifier, forIndexPath: indexpath) as! T
    }

    func registerReusableHeaderFooterView<T: UITableViewHeaderFooterView where T: Reusable>(_: T.Type) {
        if let nib = T.nib {
            self.registerNib(nib, forHeaderFooterViewReuseIdentifier: T.reuseIndentifier)
        } else {
            self.registerClass(T.self, forHeaderFooterViewReuseIdentifier: T.reuseIndentifier)
        }
    }

    func dequeueReusableHeaderFooterView<T: UITableViewHeaderFooterView where T: Reusable>() -> T? {
        return self.dequeueReusableHeaderFooterViewWithIdentifier(T.reuseIndentifier) as! T?
    }
}

class JHTableViewCell: UITableViewCell, Reusable {
    static var nib: UINib? {
        return UINib(nibName: String(JHTableViewCell.self), bundle: nil)
    }

    override func awakeFromNib() {
        super.awakeFromNib()
    }

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
    }
}

class CodeBasedCustomCell: UITableViewCell, Reusable {

}
时间: 2024-12-30 01:12:31

Swift 之Protocol在cocoa中的使用范例搜集(一)的相关文章

Swift互用性:采用Cocoa设计模式(Swift 2.0版)-b

本页包含内容: 委托(Delegation) 错误处理(Error Handling) 键值观察(Key-Value Observing) Target-Action模式(Target-Action) 类型匹配与统一规范(Introspection) API 可用性 使用 Cocoa 现有的一些设计模式,是帮助开发者开发一款拥有合理设计思路.稳定的性能.良好的可扩展性应用的有效方法之一.这些模式都依赖于在 Objective-C 中定义的类.因为 Swift 与 Objective-C 的互用性

Swift的数组与OC中数组的区别

相同的值可以多次出现在一个数组的不同位置: Swift中的数组,数据值在被存储进入到某个数组之前类型必须明确,可以显示的类型标注或者类型推断.而且,Swift中的数组不必是对象类型. OC中的NSArray和NSMutableArray,他们可以存储任何类型的实例,而且不提供他们返回对象的任何本质信息. Swift的数组与OC中数组的区别,布布扣,bubuko.com

iphone开发cocoa中nil,NSNull,Nil的使用区别

1,nil的简单定义 你可能还不知道nil在Objective-C中是什么意思.为了避免混乱,先简单定义一下nil: nil表示一个对象指针不指向任何对象时的值. 如果你熟悉其它源自C语言的语言,你可能会问:NULL和nil是一样的吗? 答案是基本一样.NULL可以用在C语言的各种指针上,而nil用在Objective-C的对象指针上.如果你在xcode上右击nil,查看定义,你会发现:nil.NULL和__DARWIN_NULL全都定义成一个值,那就是(void *)0. Objective-

Swift &amp; Objc 在同一个项目中的使用

在WWDC大会中发布了Swift让人眼前一亮.终于加了很多的现代编程语言该有的东西.很早年以前玩C#3.0+的时候这些差不多类似的 已经用的烂熟的东西终于一点一点的在看Swift Programming Language的时候再唤醒. Swift较之于OC(Objective-C)在愈发上几乎是一门新的语言了,幸运的是Swift和OC都是出自苹果大家庭,还能在一张桌子上吃饭.也就是说在升级项目 的时候你可以考虑使用Swift开发新的功能,调用已有的部分或者被已有的部分调用.或者在Swift开发的

cocoa中的NSPredicate介绍

在COCOA中的NSPredicate表示的就是一种判断.一种条件的构建.我们可以先通过NSPredicate中的predicateWithFormat方法来生成一个NSPredicate对象表示一个条件,然后在别的对象中通过evaluateWithObject方法来进行判断,返回一个布尔值. 废话不多说,直接上代码: - (BOOL)validatePhoneNumber { // 手机号以13, 15,18开头,八个 \d 数字字符 NSString *phoneNumberRegEx =

Swift / Objective_C / Xcode实际开发中可能遇到的小功能小技巧总结

一:Swift3.0为视图添加旋转动画,效果如下: 代码实现: //创建动画 let anim = CABasicAnimation(keyPath: "transform.rotation") //设置相关属性 anim.toValue = 2 * M_PI anim.repeatCount = MAXFLOAT anim.duration = 15 //完成之后不移除,testView被释放,动画随着一起删除 anim.isRemovedOnCompletion = false t

swift禁用webView对H5中数字,链接,日期,地址,电话号码做解析

showWebView.dataDetectorTypes = .None //swift禁用webView对H5中数字,链接,日期,地址,电话号码做解析 其UIDataDetectorTypes属性: static var PhoneNumber: UIDataDetectorTypes { get } // Phone number detection static var Link: UIDataDetectorTypes { get } // URL detection static v

cocoa中获得root权限的几种方法

目前我所知道的,在cocoa中获得root权限的方法有3种: 1. 通过AuthorizationCopyRights函数 2. 在UI上添加一个锁的样子的控件,然后通过开关这个锁来获取root权限 3. 直接调用Applescript来以root权限执行脚本 其中方法1和2一般用来执行一个shell脚本或者一个可执行文件,方法3则直接执行一个applescript脚本. 当然方法1和2也可以执行一个保存的applescript脚本,方法3也可以用applescript脚本来执行shell或可执

XE7 Android 中使用 MessageDlg 范例

XE7 Android 中使用 MessageDlg 范例 MessageDlg('Choose a button:', System.UITypes.TMsgDlgType.mtInformation, [ System.UITypes.TMsgDlgBtn.mbYes, System.UITypes.TMsgDlgBtn.mbNo, System.UITypes.TMsgDlgBtn.mbCancel ], 0, procedure(const AResult: TModalResult)