在函数中使用闭包

Cod*_*221 0 closures ios swift

我想知道closure在函数中是否有使用a 的方法updateView(),因此该代码not repeated用于phonepad在下面的代码中。这里封闭应有parameterswidthheight

  @IBInspectable var leftImage: UIImage? {
        didSet {
            updateView()
        }
    }

func updateView() {
    if let image = leftImage
    {
        leftViewMode = UITextField.ViewMode.always
        if (UIDevice.current.userInterfaceIdiom == .phone)
        {
            let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
            imageView.contentMode = .scaleAspectFit
            imageView.image = image
            imageView.tintColor = color
            leftView = imageView
        }
        if (UIDevice.current.userInterfaceIdiom == .pad)
        {
            let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
            imageView.contentMode = .scaleAspectFit
            imageView.image = image
            imageView.tintColor = color
            leftView = imageView
        }
    }
    else
    {
        leftViewMode = UITextField.ViewMode.never
        leftView = nil
    }
}
Run Code Online (Sandbox Code Playgroud)

我没办法了,尝试失败了。提前致谢。

rma*_*ddy 5

该代码是相同的,除了图像视图的大小。根据设备设置大小变量,不要重复任何其他代码。

func updateView() {
    if let image = leftImage {
        leftViewMode = UITextField.ViewMode.always
        let size: CGFloat = UIDevice.current.userInterfaceIdiom == .phone ? 20 : 30
        let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: size, height: size))
        imageView.contentMode = .scaleAspectFit
        imageView.image = image
        imageView.tintColor = color
        leftView = imageView
    } else {
        leftViewMode = UITextField.ViewMode.never
        leftView = nil
    }
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句-不要编写基于设备习惯用法做出决定的代码。根据视图控制器视图的大小做出决定。