为每个不编译的语句做文本对齐
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
}
}
在我下面的 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
}
}