2015-03-03 56 views
1

我有一個名爲UIElements.swift的文件,其中包含我想在整個應用中使用的一些擴展名。Swift擴展類功能只能在1個文件中工作

到目前爲止他們工作得很好。直到我創建了一個新的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加到班裏,沒有做任何事。

任何人都可以解釋爲什麼這個函數在一個文件中工作,但不是另一個?

+0

您是否嘗試將公共擴展名添加到擴展中? – 2015-03-03 11:53:46

+0

是啊,如在第二行最後一行:)也試過內部,這沒有結果。 – MLyck 2015-03-03 13:22:34

回答

0

我發送錯誤報告給蘋果這個

既然這個問題已經觸及了一段時間沒有。我最終創建了一個新項目並複製了我的文件。現在正在工作。仍然沒有線索,爲什麼它沒有工作。這些文件是相同的,相同的結構,相同的名稱,相同的目標。

1

你試過清理你的項目(Command-Option-Shift-K)嗎?清理項目會清空Xcode緩存。更好的是退出你的項目並手動清理~/Library/Developer/Xcode/DerivedData。確保你刪除了這個文件夾中的所有內容,因爲這個bug可以緩存在任何文件中。

+0

是的,我試圖清洗它。但是我沒有清理那個文件夾,有一刻我會嘗試。非常感謝你的建議!我會在第二個 – MLyck 2015-03-03 12:57:29

+0

回覆您好吧,我刪除了/ Library/Developer/Xcode/DerivedData文件夾中的所有內容,並再次清理了該項目。 不幸的是,問題仍然存在。 任何其他的想法是非常歡迎的:(這是令人難以置信的令人沮喪。 – MLyck 2015-03-03 13:08:16

+1

你可以嘗試返回自我。來自你的擴展的圖像,看看它是否有效? – 2015-03-03 13:09:10