Swift技术问询:如何判断返回对象是否为UIView及随机返回视图实现
解决方案:随机返回UIView/UILabel并判断类型
嘿Jasmeen,我来帮你搞定这个需求,同时教你怎么在Swift里判断返回对象的类型~
1. 完整的RandomObject类实现
首先咱们把RandomObject.swift的代码补全,实现那个能随机返回UIView或UILabel的类方法:
import UIKit class RandomObject: NSObject { // 类方法:随机返回UIView或UILabel实例 class func randomObject() -> UIView { // 先创建一个通用的frame,你可以根据需求调整尺寸和位置 let frame = CGRect(x: 50, y: 100, width: 200, height: 100) // 50%概率随机决定返回UIView还是UILabel let shouldReturnLabel = Bool.random() if shouldReturnLabel { let label = UILabel(frame: frame) label.text = "我是UILabel😎" label.textAlignment = .center label.backgroundColor = .lightGray return label } else { let view = UIView(frame: frame) view.backgroundColor = .systemBlue return view } } }
我给两个控件加了简单的样式和文本,方便你测试时一眼就能区分它们~
2. 如何判断返回对象是否为UIView(或UILabel)
在Swift里判断对象类型有几种常用方式,针对你的场景,推荐下面两种实用方法:
方式一:用is运算符直接判断类型
is可以快速检查对象是否属于某个类型(包括子类):
// 调用方法获取随机对象 let randomView = RandomObject.randomObject() // 判断是不是UIView(UILabel是UIView的子类,所以这里会返回true) if randomView is UIView { print("这是一个UIView(包括它的子类)") } // 如果要判断是不是纯UIView(排除UILabel这类子类),可以这么写: if type(of: randomView) == UIView.self { print("这是一个纯UIView,不是子类") }
方式二:用as?进行可选绑定(更实用)
如果你不仅要判断类型,还要使用该类型的专属属性/方法,用as?可选绑定会更方便:
let randomView = RandomObject.randomObject() // 判断是不是UILabel,如果是就直接用它的text属性 if let label = randomView as? UILabel { print("这是UILabel,文本是:\(label.text ?? "空")") } else { print("这是UIView") }
3. 按钮点击的调用示例
最后在你的ViewController里,给顶部的UIButton添加点击事件,调用这个方法就可以啦:
class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // 创建顶部按钮 let button = UIButton(type: .system) button.setTitle("生成随机控件", for: .normal) button.frame = CGRect(x: 50, y: 50, width: view.frame.width - 100, height: 44) button.addTarget(self, action: #selector(generateRandomObject), for: .touchUpInside) view.addSubview(button) } @objc func generateRandomObject() { let randomView = RandomObject.randomObject() // 添加到当前视图显示 view.addSubview(randomView) // 这里可以加入类型判断的代码 if let label = randomView as? UILabel { print("生成了一个UILabel") } else { print("生成了一个UIView") } } }
这样每次点击按钮,就会随机生成一个UIView或者UILabel并显示在界面上啦~
内容的提问来源于stack exchange,提问作者Jasmeen Bong
相关产品推荐
相关产品推荐

