Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在Swift中查找类的同级视图_Ios_Swift - Fatal编程技术网

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()
    }