在未编译的每个语句中进行文本对齐
Posted
技术标签:
【中文标题】在未编译的每个语句中进行文本对齐【英文标题】:Do text alignment in a for each statement not compiling 【发布时间】:2022-01-22 07:37:24 【问题描述】:在我下面的快速代码中,它使用了一个 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
$0.translatesAutoresizingMaskIntoConstraints = false
$0.layer.borderWidth = 1
view.addSubview($0)
$0.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 $0 is = UITextField
$0.textalignment = .cent
)
【问题讨论】:
【参考方案1】:首先,您在调用 UIColor 时缺少一个结束括号。
接下来,你的 if 语句。由于您的对象数组具有不同的类型,因此该数组的类型为Array<Any>
。
你的if $0 is UITextField
的意思是“如果当前被迭代的对象是UITextField
类型,则只执行这个if 语句的主体。然而,编译器不会将$0
视为该类型。
我将使用if let
可选绑定来创建UITextField
类型的新局部变量,而不是使用if $0 is <type>
:
override func viewDidLoad()
super.viewDidLoad()
[player1Score,player2Score,clearBtn,player1UpBTN,player1DownBtn,player2UpBTN,player2DownBtn,play1Lbl, play2Lbl,play1text,play2text,resetBtn,resetBtn,GameLabel,GameText,gameIncrease,gameDecrease,submit].forEach
$0.translatesAutoresizingMaskIntoConstraints = false
$0.layer.borderWidth = 1
view.addSubview($0)
$0.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 = $0 as? UITextField
// if the if let succeeds, `textField` will be
// a var of the correct type
textfield.textalignment = .cent
【讨论】:
以上是关于在未编译的每个语句中进行文本对齐的主要内容,如果未能解决你的问题,请参考以下文章