gpt4 book ai didi

swift - Swift 中如何检查返回的对象是否是 UIView

转载 作者:行者123 更新时间:2023-11-30 11:38:29 25 4
gpt4 key购买 nike

我是贾斯敏·邦。我想创建一个在屏幕顶部带有单个按钮(UIButton)的新应用程序。我创建一个名为 RandomObject.swift 的文件并将其添加到我的项目中。当按下按钮时,我的应用程序将从 RandomObject 类调用 randomObject 类方法。

下面是我的 RandomObject 文件中的代码。在此文件中,我想编写一个函数,它将随机返回 UIView 或 UILabel。

class RandomObject: NSObject {

//create a frame for the object
class func _randomFrame() -> CGRect {
let x: CGFloat = CGFloat(arc4random() % 220)
let y: CGFloat = CGFloat((arc4random() % 200) + 100)
return CGRect(x: x, y: y, width: 100, height: 100)
}

//create an uilabel
class func _createUILabel() -> UILabel {
let randomFrame: CGRect = RandomObject._randomFrame()
let label = UILabel(frame: randomFrame)
label.text = "UILabel"
return label
}


//create a uiview
class func _createUIView() -> UIView {
let randomFrame: CGRect = RandomObject._randomFrame()
let aView = UIView(frame: randomFrame)
return aView
}



class func randomObject() -> Any {
// create a random generator that get value between 0 - 7
arc4random_stir()
let randomNum: Int = Int(arc4random() % 2)
// Return value of anonymous type, but conforms to NSObject protocol
var returnObj: NSObject? = nil

//use switch case to create returnObj randomly
switch randomNum {
case 0:
returnObj = RandomObject._createUILabel()
case 1:
returnObj = RandomObject._createUIView()
default:
print("error")
}

//return the returnObj
return returnObj
}

}

这是我在 viewController 文件中编写的代码。在这里,我想调用 randomObject 函数并检查返回的对象是否是 UIView。如果是UIView,则将其背景颜色设置为随机颜色,并将其添加为 subview 。

class ViewController: UIViewController {

@IBAction func PressMeButton(_ sender: Any)
{
let aObj = RandomObject.randomObject()
//check if aObj is a UIView
if (aObj is UIView) {
let myView = aObj as? UIView
let red = CGFloat(arc4random()) / CGFloat(RAND_MAX)
let blue = CGFloat(arc4random()) / CGFloat(RAND_MAX)
let green = CGFloat(arc4random()) / CGFloat(RAND_MAX)
let randomColor: UIColor? = UIColor(red: red, green: blue, blue: green, alpha: 1)

myView?.backgroundColor = randomColor
self.view.addSubview(myView!)

}
}

但我的问题是我的 if 语句:

if (aObj is UIView)

它无法帮助我检查返回的对象是 UIView 和/或 UILabel。因此,UILabel 也将被添加为 subview 。我可以知道如何解决这个问题吗?非常感谢您的帮助。

最佳答案

由于 UILabel 继承自 UIView,因此您的检查 aObj is UIView 对于两者都会成功。如果你想以不同的方式对待 UILabels,你需要先检查它们:

if let lbl = aObj as? UILabel {
// do label stuff
} else if let view = aObj as? UIView {
// do view stuff
}

关于swift - Swift 中如何检查返回的对象是否是 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49474160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com