对于很多操作,我需要检查label.text、textView.text、textField.text等的内容是否为零。
所以我创建了一些扩展:
extension UILabel {
func getText() -> String {
return self.text ?? ""
}
}
extension UITextField {
func getText() -> String {
return self.text ?? ""
}
}
extension UITextView {
func getText() -> String {
return self.text ?? ""
}
}扩展是非常多余的。类似的情况是,我需要将Int、Double、Float等转换为另一种数字格式。我想要的是一个简单的toInt(),在出了问题时返回-1或0。
那么,如何为toString()或toInt()创建泛型函数呢?我在苹果文档中读到了关于扩展和仿制药的文章,但我没有找到解决问题的方法。
最后,我尝试用相同的扩展扩展UIView,因为它是UILabel等的超类,但我不能调用getText()。
那么,创建泛型扩展的好方法是什么呢?
发布于 2018-03-28 15:22:22
这个单行比这里发布的所有其他答案减少了冗余代码(您想要的)。不需要疯狂的状态-检查或多个扩展。
extension UIView {
func getText() -> String? {
return self.responds(to: #selector(getter: UILabel.text)) ?
self.perform(#selector(getter: UILabel.text))?.takeUnretainedValue() as? String : nil
}
}https://stackoverflow.com/questions/49536268
复制相似问题