Swift扩展类功能仅适用于1个文件

时间:2015-03-03 11:41:17

标签: ios swift swift-extensions

我有一个名为UIElements.swift的文件,其中包含我想在整个应用中使用的扩展程序。

到目前为止,他们工作得非常好。在我创建一个新的viewController之前,我无法让它们在我或其他任何viewControllers中工作。它们只在我的第一个viewController中工作?

这是扩展程序文件的代码:

import UIKit

extension UIImage {
    //create image from UIColor, to use for buttons
    class func imageWithColor(color:UIColor?) -> UIImage! {
        let rect = CGRectMake(0.0, 0.0, 1.0, 1.0);
        UIGraphicsBeginImageContextWithOptions(rect.size, false, 0)
        let context = UIGraphicsGetCurrentContext();
        if let color = color {
            color.setFill()
        }
        else {
            UIColor.whiteColor().setFill()
        }
        CGContextFillRect(context, rect);
        let image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return image;
    }
}

显然我在文件中有更多的扩展名,但是当我注意到它没有用时,这是我试图先调用的函数。

以下代码在名为Login_VC.swift

的文件中不起作用
import UIKit

class LoginVC: UIViewController {

    override func viewDidLoad() {

        super.viewDidLoad()

        var signInButton = UIButton()
        signInButton.setTranslatesAutoresizingMaskIntoConstraints(false)
        signInButton.setTitle("SIGN IN", forState: .Normal)
        signInButton.titleLabel!.font =  UIFont(name: "BebasNeue-Bold", size: 50)
        signInButton.setBackgroundImage(UIImage.imageWithColor(UIColor.colorWithHex("#12D99E")), forState: .Normal)
        self.view.addSubview(signInButton)

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

上面的代码返回以下错误:

'UIImage.Type' does not have a member named 'imageWithColor'

这是我在第一个视图控制器中调用LandingPageVC.swift的类似按钮(此代码工作正常)

import UIKit

class LandingPageVC: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()


    var signUpButton: UIButton = UIButton()
    signUpButton.setTranslatesAutoresizingMaskIntoConstraints(false)
    signUpButton.setTitle("Sign Up Today", forState: .Normal)
    signUpButton.titleLabel!.font =  UIFont(name: "BebasNeue-Bold", size: 50)
    signUpButton.setBackgroundImage(UIImage.imageWithColor(UIColor.colorWithHex("#12D99E")), forState: .Normal)
    signUpButton.setBackgroundImage(UIImage.imageWithColor(UIColor.colorWithHex("#0DB07F")), forState: .Highlighted)
    signUpButton.layer.shadowColor = formulaShadowColor.CGColor
    signUpButton.layer.shadowOffset = CGSizeMake(3, 3)
    signUpButton.layer.shadowRadius = 0
    signUpButton.layer.shadowOpacity = 1.0
    signUpButton.addTarget(self, action: "signUp:", forControlEvents: .TouchUpInside)
    signUpButton.addTarget(self, action: "signUpHighlighted:", forControlEvents: .TouchDown)
    signUpButton.addTarget(self, action: "signUpReset:", forControlEvents: .TouchDragExit)
    self.view.addSubview(signUpButton)

}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

我无法在任何一个档案中看到我做过的任何事情。

当我开始写UIImage.i - >它在第一个视图控制器中建议imageWithColor,但它不会显示在任何其他文件中。

我没有做任何事情来在这两个文件中导入这个类。由于它只是UIImage的扩展名,因此应使用UIKit导入。

我也尝试在课堂上添加public,但没有做任何事情。

任何人都可以解释为什么这个函数在一个文件中工作,而不是另一个文件?

2 个答案:

答案 0 :(得分:1)

您是否尝试过清理项目(Command-Option-Shift-K)?清理项目会清空Xcode缓存。更好的方法是退出项目并手动清除~/Library/Developer/Xcode/DerivedData。确保删除此文件夹中的所有内容,因为错误可以缓存在任何文件中。

答案 1 :(得分:0)

我向苹果发送了一个关于此

的错误报告

因为这个问题已经有一段时间未被触及了。我最终创建了一个新项目并将我的文件复制过来。它现在正在工作。仍然不知道为什么它无法工作。文件相同,结构相同,名称相同,目标相同。