gpt4 book ai didi

ios - Swift 扩展类函数仅适用于 1 个文件

转载 作者:行者123 更新时间:2023-11-28 07:09:52 25 4
gpt4 key购买 nike

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

到目前为止,他们工作得很好。在我创建一个新的 viewController 之前,我无法让它们中的任何一个在那个或我制作的任何其他 viewController 中工作。它们只在我的第一个 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'

这是我制作的第一个 View Controller 中的一个类似按钮,名为 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 时 -> 它建议在第一个 View Controller 中使用 imageWithColor,但它不会显示在任何其他文件中。

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

我还尝试将 public 添加到类中,但没有做任何事情。

谁能解释为什么这个函数在一个文件中有效,而在另一个文件中无效?

最佳答案

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

关于ios - Swift 扩展类函数仅适用于 1 个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28830920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com