swift - 创建 Swift 闭包以创建 UIView

标签 swift closures dry

我想将 DRY 应用于我在 swift 中创建的线条。我如何重构此代码以便调用闭包?它驻留在 View Controller 上。

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 无法推断闭包的返回类型,因此您需要提前告诉它您正在返回一个 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()

关于swift - 创建 Swift 闭包以创建 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58509207/

相关文章:

python - 基本 Python、Django、DRY - 从(模型)类调用方法

html - 复制 Youtube 的导航栏,但是,我习惯使用位置 : absolute; I need a more effective way of doing this

javascript - Jquery - (重新)连接动态生成的元素

ios - Swift 默认的 AlertViewController 打破约束

ios - 如何更改 UILabel 中链接的颜色?

ios - 使用移动代码(手机验证)的 Firebase 身份验证登录代码已过期

javascript - 如何创建类似 Google Closure 的继承结构

iOS - 延迟后 UITableView 重新加载数据

Javascript:在对象闭包中使用访问器属性

functional-programming - 如何在闭包中获取多个参数并打印它们?