Ios 在Swift中查找类的同级视图
我有一个Ios 在Swift中查找类的同级视图,ios,swift,Ios,Swift,我有一个 class Fancy:UIButton 我想找到同一类的所有同级视图 我这样做 for v:UIView in superview!.subviews { if v.isKindOfClass(Fancy) { // you may want... if (v==self) continue print("found one") (v as! Fancy).someProperty = 7
class Fancy:UIButton
我想找到同一类的所有同级视图
我这样做
for v:UIView in superview!.subviews
{
if v.isKindOfClass(Fancy)
{
// you may want... if (v==self) continue
print("found one")
(v as! Fancy).someProperty = 7
(v as! Fancy).someCall()
}
}
它在测试中似乎工作可靠(没有兄弟姐妹,很多兄弟姐妹,等等)
但是里面有很多“!”字
这是斯威夫特的路吗
顺便说一句,这里有一个很酷的方法,可以根据下面的答案进行扩展 关于:
for v in superview!.subviews
{
if let f = v as? Fancy{
print("found one")
f.someProperty = 7
f.someCall()
}
}
或者这个:
if let views = superview?.subviews
{
for aView in views
{
if let fancyView = aView as? Fancy
{
fancyView.someProperty = 7
fancyView.someCall()
}
}
}
@RobMayoff在排除self方面有一个很好的观点。代码应该是:
if let views = superview?.subviews
{
for aView in views
{
if let fancyView = aView as? Fancy where fancyView != self
{
fancyView.someProperty = 7
fancyView.someCall()
}
}
}
使用函数式编程怎么样
在superview?中为v尝试
。子视图??[]
以摆脱最后一个代码>。如果设f=v为?想象一下f!=self
如果你想跳过self。我觉得这是最直截了当、不太简洁、也不太冗长的成语回答。再次感谢大家。这个答案是我最喜欢的。(投票)我需要教会自己用函数式编程的方式思考。@Duncac:谢谢,我很感激。这是一个很好的扩展!这应该是答案!强行拆开包装是危险的,应避免。。如果失败,你就会崩溃。你的内力展开(v as!Fancy)
是节省,但不雅观。嗨@duncac,你很确定它是安全的吗??(不雅观的我们可以在后面处理:))内部是强制向下铸造,而不是强制展开。我说错了。是的,它是安全的,因为它包含在一个if语句中,可以单独检查VP类,我喜欢@appzyorlife的函数版本,但你应该接受其中一个。很遗憾,一个人不能写,因为它是:for aView as?在视图中别出心裁
那么您想要一个带有“as”转换的for循环来执行隐式筛选?那很方便,对!那真是太好了。我发现扩展方法(见下面的链接)可以产生非常整洁的代码。“推断的或指定的”事物是amazing@JoeBlow“请参阅下面的链接。”什么链接?
self.superview?
.subviews
.flatMap { $0 as? Fancy }
.filter { $0 != self }
.forEach { fancy in
fancy.someProperty = 4
fancy.someMethod()
}