创建 Swift 闭包以创建 UIView
Create Swift closure to create a UIView
我想将 DRY 应用于我在 swift 中创建的行。我如何重构此代码以便调用闭包?它位于 viewcontroller.
var topLineView: UIView = {
let lineView = UIView()
lineView.layer.borderWidth = 1.0
lineView.layer.borderColor = UIColor.lightGray.cgColor
return lineView
}()
var bottomLineView: UIView = {
let lineView = UIView()
lineView.layer.borderWidth = 1.0
lineView.layer.borderColor = UIColor.lightGray.cgColor
return lineView
}()
var centerLineView: UIView = {
let lineView = UIView()
lineView.layer.borderWidth = 1.0
lineView.layer.borderColor = UIColor.lightGray.cgColor
return lineView
}()
我尝试创建一个变量,但这导致了错误:
let lineView = {
let lineView = UIView()
lineView.layer.borderWidth = 1.0
lineView.layer.borderColor = UIColor.lightGray.cgColor
return lineView
}
var centerLineView = lineView()
错误(无法推断闭包类型等...)
Swift 无法推断出闭包的 return 类型,因此您需要提前告诉它您正在 returning 一个 UIView
.这编译并运行良好。
let lineView = { () -> UIView in
let lineView = UIView()
lineView.layer.borderWidth = 1.0
lineView.layer.borderColor = UIColor.lightGray.cgColor
return lineView
}
var myViewFromClosure = lineView()
var myViewFromClosure2 = lineView()
var myViewFromClosure3 = lineView()
不过,在这种情况下,我个人会选择 function
而不是 closure
。像这样:
func lineViewFunc() -> UIView {
let lineView = UIView()
lineView.layer.borderWidth = 1.0
lineView.layer.borderColor = UIColor.lightGray.cgColor
return lineView
}
var myViewFromFunc = lineViewFunc()
var myViewFromFunc2 = lineViewFunc()
var myViewFromFunc3 = lineViewFunc()
函数的问题是我必须在 super.init 之前调用它,但 self 还不存在。
我想将 DRY 应用于我在 swift 中创建的行。我如何重构此代码以便调用闭包?它位于 viewcontroller.
var topLineView: UIView = {
let lineView = UIView()
lineView.layer.borderWidth = 1.0
lineView.layer.borderColor = UIColor.lightGray.cgColor
return lineView
}()
var bottomLineView: UIView = {
let lineView = UIView()
lineView.layer.borderWidth = 1.0
lineView.layer.borderColor = UIColor.lightGray.cgColor
return lineView
}()
var centerLineView: UIView = {
let lineView = UIView()
lineView.layer.borderWidth = 1.0
lineView.layer.borderColor = UIColor.lightGray.cgColor
return lineView
}()
我尝试创建一个变量,但这导致了错误:
let lineView = {
let lineView = UIView()
lineView.layer.borderWidth = 1.0
lineView.layer.borderColor = UIColor.lightGray.cgColor
return lineView
}
var centerLineView = lineView()
错误(无法推断闭包类型等...)
Swift 无法推断出闭包的 return 类型,因此您需要提前告诉它您正在 returning 一个 UIView
.这编译并运行良好。
let lineView = { () -> UIView in
let lineView = UIView()
lineView.layer.borderWidth = 1.0
lineView.layer.borderColor = UIColor.lightGray.cgColor
return lineView
}
var myViewFromClosure = lineView()
var myViewFromClosure2 = lineView()
var myViewFromClosure3 = lineView()
不过,在这种情况下,我个人会选择 function
而不是 closure
。像这样:
func lineViewFunc() -> UIView {
let lineView = UIView()
lineView.layer.borderWidth = 1.0
lineView.layer.borderColor = UIColor.lightGray.cgColor
return lineView
}
var myViewFromFunc = lineViewFunc()
var myViewFromFunc2 = lineViewFunc()
var myViewFromFunc3 = lineViewFunc()
函数的问题是我必须在 super.init 之前调用它,但 self 还不存在。