Je me demande comment transformer essentiellement le code Objective C ci-dessous en Swift.
Cela parcourra toutes les sous-vues de ma vue souhaitée, vérifier s'il s'agit de champs de texte, puis vérifier s'ils ne sont pas vides.
for (UIView *view in contentVw.subviews) {
NSLog(@"%@", view);
if ([view isKindOfClass:[UITextField class]]) {
UITextField *textfield = (UITextField *)view;
if (([textfield.text isEqualToString:""])) {
//show error
return;
}
}
}
Voici où je suis avec Swift jusqu'à présent:
for view in self.view.subviews as [UIView] {
if view.isKindOfClass(UITextField) {
//...
}
}
Toute aide est la bienvenue!
Swift 5 et Swift 4: - Une réponse très simple que vous pouvez comprendre facilement: - Vous pouvez gérer toutes sortes d'objets comme UILable, UITextfields, UIButtons, UIView, UIImages. Tout type d'objecs, etc.
for subview in self.view.subviews
{
if subview is UITextField
{
//MARK: - if the sub view is UITextField you can handle here
if subview.text == ""
{
//MARK:- Handle your code
}
}
if subview is UIImageView
{
//MARK: - check image
if subview.image == nil
{
//Show or use your code here
}
}
}
//MARK:- You can use it any where, where you need it
//Suppose i need it in didload function we can use it and work it what do you need
override func viewDidLoad() {
super.viewDidLoad()
for subview in self.view.subviews
{
if subview is UITextField
{
//MARK: - if the sub view is UITextField you can handle here
if subview.text == ""
{
//MARK:- Handle your code
}
}
if subview is UIImageView
{
//MARK: - check image
if subview.image == nil
{
//Show or use your code here
}
}
}
}
Mise à jour pour Swift 2 (et versions ultérieures): À partir de Swift 2/Xcode 7 cela peut être simplifié.
self.view.subviews
est déjà déclaré comme [UIView]
dans Swift, donc le casting n'est plus nécessaire.Cela donne:
for case let textField as UITextField in self.view.subviews {
if textField.text == "" {
// show error
return
}
}
Ancienne réponse pour Swift 1.2:
Dans Swift cela est bien fait avec l'opérateur optionnel downcastas?
:
for view in self.view.subviews as! [UIView] {
if let textField = view as? UITextField {
if textField.text == "" {
// show error
return
}
}
}
Voir "Downcasting" dans le livre Swift.