为每个不编译的语句做文本对齐

Do text alignment in a for each statement not compiling

在我下面的 swift 代码中,它使用了一个 forEach 语句。问题是套装中的一些物品无法进行文字排列。例如,文本对齐在 uiimageview 中是不可能的。因此,我尝试编写一些可能有效但确实发生编译错误的代码。您可以在下面的评论区看到我尝试编写的代码。

override func viewDidLoad() {
        super.viewDidLoad()
        [player1Score,player2Score,clearBtn,player1UpBTN,player1DownBtn,player2UpBTN,player2DownBtn,play1Lbl, play2Lbl,play1text,play2text,resetBtn,resetBtn,GameLabel,GameText,gameIncrease,gameDecrease,submit].forEach{
        [=10=].translatesAutoresizingMaskIntoConstraints = false
        [=10=].layer.borderWidth = 1
        view.addSubview([=10=])
        [=10=].backgroundColor = UIColor(
            red: .random(in: 0.0...1),
            green: .random(in: 0.0...1),
            blue: .random(in: 0.0...1),
            alpha: 1
            

             //part of cocde I tried that does not work
            if [=10=] is = UITextField {
                [=10=].textalignment = .cent
            }
        )
     
    }

首先,您在调用 UIColor 时缺少右括号。

接下来是您的 if 语句。由于您的对象数组具有不同的类型,因此该数组的类型将为 Array<Any>。 您的 if [=12=] is UITextField 表示“仅当当前迭代对象的类型为 UITextField 时才执行此 if 语句的主体。然而,编译器不会将 [=14=] 视为该类型。

我不会使用 if [=15=] is <type>,而是使用 if let 可选绑定来创建类型为 UITextField:

的新局部变量
override func viewDidLoad() {
    super.viewDidLoad()
    [player1Score,player2Score,clearBtn,player1UpBTN,player1DownBtn,player2UpBTN,player2DownBtn,play1Lbl, play2Lbl,play1text,play2text,resetBtn,resetBtn,GameLabel,GameText,gameIncrease,gameDecrease,submit].forEach{
        [=10=].translatesAutoresizingMaskIntoConstraints = false
        [=10=].layer.borderWidth = 1
        view.addSubview([=10=])
        [=10=].backgroundColor = UIColor(
            red: .random(in: 0.0...1),
            green: .random(in: 0.0...1),
            blue: .random(in: 0.0...1),
            alpha: 1
        )
        if let textfield = [=10=] as? UITextField {
            // if the if let succeeds, `textField` will be 
            // a var of the correct type
            textfield.textalignment = .cent
        }
    }