ios – 在Swift导入扩展文件

前端之家收集整理的这篇文章主要介绍了ios – 在Swift导入扩展文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在 Swift中为UIView创建一个扩展名.任何人都知道如何将该文件导入到我的UIViewController?

我想在控制器文件中导入扩展文件,这样我可以重新使用扩展文件.例如这样的结构:

UIViewExtension.swift

import UIKit

extension UIView {
    var myVar : Float {
        get {
            return myVar
        }
        set (newMyVar) {
            myVar = newMyVar
        }
    }
}

ViewController.swift

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view,typically from a nib.
        var squareView: UIView = UIView(frame: CGRect(x: 0,y: 0,width: 200,height: 200))

        squareView.myVar = 50

        self.view.addSubview(squareView)
        println("Offset: \(squareView.myVar)")
    }
}

这是编译器给出的错误

命令/Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift失败,退出代码为254

解决方法

这里有几件事情.

>不需要像Objective-C一样导入扩展,因为同一模块中的所有内容都可以在Swift中自动使用.这意味着您的扩展名实际上可以在视图控制器中对编译器成功显示.
>您只能将计算属性添加到扩展名.这意味着你实际上没有一个myVar来分配或读取.所以当你访问myVar时,你实际上是无限循环的.这实际上是警告所暗示的(尽管是模糊的):

warning: attempting to access 'myVar' within its own getter
  return myVar
         ^

>据我所知,无法使用扩展名将非计算属性添加到类型. Objective-C也是如此,实际存储使用类扩展添加到类的属性的唯一方法是通过objc_getAssociatedObject和objc_setAssociatedObject从objc / runtime.h使用Objective-C对象关联.
>最后如果扩展的计算属性有一个setter,那么编译器肯定会有一个错误.重现错误的最小工作示例,不包括递归(通过消除对myVar的访问),并忽略该值:

import UIKit

extension UIView {
  var myVar : Float {
  get {
    return 0
  }
  set {
  }
  }
}

猜你在找的iOS相关文章