我在Swift中为UIView创建了一个扩展.任何人都知道如何将该文件导入我的UIViewController?
我想在控制器文件中导入扩展文件,这样我就可以重用扩展文件了.例如,像这样的结构:
UIViewExtension.swift
import UIKit
extension UIView {
var myVar : Float {
get {
return myVar
}
set (newMyVar) {
myVar = newMyVar
}
}
}
Run Code Online (Sandbox Code Playgroud)
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)")
}
}
Run Code Online (Sandbox Code Playgroud)
这是编译器给出的错误:
Command /Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift failed with exit code 254
这里有几件事情.
您只能将计算属性添加到扩展名.这意味着您实际上没有要分配或读取的myVar.因此,当您访问时,myVar
您实际上是无限递归.这实际上是警告暗示的内容(虽然模糊不清):
warning: attempting to access 'myVar' within its own getter
return myVar
^
Run Code Online (Sandbox Code Playgroud)据我所知,没有办法使用扩展名向类型添加非计算属性.Objective-C也是如此,其中实际存储使用类扩展添加到类的属性的唯一方法是使用Objective-C对象通过objc_getAssociatedObject
和objc_setAssociatedObject
从objc/runtime.h
.
最后,如果您的扩展的计算属性具有setter,则编译器中肯定存在错误.重现错误的最小工作示例,不包括递归(通过消除对myVar的访问)并忽略该值是:
import UIKit
extension UIView {
var myVar : Float {
get {
return 0
}
set {
}
}
}
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
11752 次 |
最近记录: |