扩展内的NSObject类具有未定义的行为吗?

时间:2019-05-07 03:43:30

标签: ios swift

因此,我有一个文本字段,用于设置其委托。在大多数情况下,它会按预期工作,应该会调用shouldChangeCharacters,但很少会不应该调用shouldChangeCharacters。

现在,我认为这可能只是一个竞赛条件,但仅在某些清理和构建运行中才会发生。而且,当它确实发生时,它是非常一致的,即使重新创建该实例,它仍然会始终发生。这就是为什么我将其排除在竞赛问题之外,并且将其视为编译/机器代码创建期间的未定义行为。

所以,我的问题是我是否违反了Objc和Swift运行时的扩展名和协议构架设置方式?如果是,该如何解决?

class LabelAndTextFieldView: UIView{
   let textField: UITextField
   var delegate: LabelAndTextFieldViewDelegate?{ //strong so it would not dealloc
      didSet{
          textField.delegate = delegate
      }
   }
}


extension LabelAndTextFieldView{
   class LabelAndTextFieldViewDelegate: NSObject{
      //some methods unrelated to uitextfieldDelegate
   }  


   class AmountFormattingTextFieldDelegate: LabelAndTextFieldViewDelegate{
      func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
         //disallow if not numeric
      }

   }


}

extension LabelAndTextFieldView.LabelAndTextFieldViewDelegate: UITextFieldDelegate{
  //other uitextfield delegate methods EXCEPT shouldChangeCharactersInRange
}





//code assignment

class SomeVC{
   @IBOutlet weak var labelTextFieldView: LabelAndTextFieldView!


   override func viewDidLoad(){
      super.viewDidLoad()
      labelTextFieldView.delegate = AmountFormattingTextFieldDelegate() //this will not dealloc because intended strong on delegate

   }
}

0 个答案:

没有答案