Swift与OC混编第一天
首先是swift调用oc,在swift的AppDelegate中使用oc控制器
注意:必须先把oc头文件导入到一个叫 "项目名称-Bridging-Header"中然后再代理中进行调用 oc控制器
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
UIView.appearance().tintColor = UIColor.blackColor()
window = UIWindow(frame: UIScreen.mainScreen().bounds)
window?.backgroundColor = UIColor.whiteColor()
window?.makeKeyAndVisible()
UITabBar.appearance().translucent = false
UITabBar.appearance().backgroundColor = UIColor.blackColor()
UITabBar.appearance().tintColor = UIColor.blackColor()
// 设置视图主窗口
self.window?.rootViewController = makeRootViewController()
return true
}
func makeRootViewController() -> UITabBarController {
let tabBarVC = UITabBarController()
tabBarVC.viewControllers = makeChildViewControllers()
tabBarVC.selectedIndex = 0
return tabBarVC
}
func makeChildViewControllers() -> [UIViewController] {
let cons: [(UIViewController.Type, String, String)] = [(OneController.self, "Home".localized(), "Home"), (TreeController.self, "Statistics".localized(), "Dashboard")]
return cons.map {
let vc = UINavigationController(rootViewController: $0.init())
vc.tabBarItem = UITabBarItem(title: $1, image: $2.originalImage, selectedImage: $2.templateImage)
return vc
}
}
// 其中localized()和templateImage是写了一个工具类
localized
//
// Strings.swift
//
import Foundation
/// Internal current language key
let LCLCurrentLanguageKey = "LCLCurrentLanguageKey"
/// Default language. English. If English is unavailable defaults to base localization.
let LCLDefaultLanguage = "en"
/// Name for language change notification
public let LCLLanguageChangeNotification = "LCLLanguageChangeNotification"
public extension String {
/**
Swift 2 friendly localization syntax, replaces NSLocalizedString
- Returns: The localized string.
*/
public func localized() -> String {
if let path = NSBundle.mainBundle().pathForResource(Localize.currentLanguage(), ofType: "lproj"), bundle = NSBundle(path: path) {
return bundle.localizedStringForKey(self, value: nil, table: nil)
}else if let path = NSBundle.mainBundle().pathForResource("Base", ofType: "lproj"), bundle = NSBundle(path: path) {
return bundle.localizedStringForKey(self, value: nil, table: nil)
}
return self
}
/**
Swift 2 friendly localization syntax with format arguments, replaces String(format:NSLocalizedString)
- Returns: The formatted localized string with arguments.
*/
public func localizedFormat(arguments: CVarArgType...) -> String {
return String(format: localized(), arguments: arguments)
}
/**
Swift 2 friendly plural localization syntax with a format argument
- parameter argument: Argument to determine pluralisation
- returns: Pluralized localized string.
*/
public func localizedPlural(argument: CVarArgType) -> String {
return NSString.localizedStringWithFormat(localized(), argument) as String
}
}
// MARK: Language Setting Functions
public class Localize: NSObject {
/**
List available languages
- Returns: Array of available languages.
*/
public class func availableLanguages() -> [String] {
return NSBundle.mainBundle().localizations
}
/**
Current language
- Returns: The current language. String.
*/
public class func currentLanguage() -> String {
if let currentLanguage = NSUserDefaults.standardUserDefaults().objectForKey(LCLCurrentLanguageKey) as? String {
return currentLanguage
}
return defaultLanguage()
}
/**
Change the current language
- Parameter language: Desired language.
*/
public class func setCurrentLanguage(language: String) {
let selectedLanguage = availableLanguages().contains(language) ? language : defaultLanguage()
if (selectedLanguage != currentLanguage()){
NSUserDefaults.standardUserDefaults().setObject(selectedLanguage, forKey: LCLCurrentLanguageKey)
NSUserDefaults.standardUserDefaults().synchronize()
NSNotificationCenter.defaultCenter().postNotificationName(LCLLanguageChangeNotification, object: nil)
}
}
/**
Default language
- Returns: The app's default language. String.
*/
public class func defaultLanguage() -> String {
var defaultLanguage: String = String()
guard let preferredLanguage = NSBundle.mainBundle().preferredLocalizations.first else {
return LCLDefaultLanguage
}
let availableLanguages: [String] = self.availableLanguages()
if (availableLanguages.contains(preferredLanguage)) {
defaultLanguage = preferredLanguage
}
else {
defaultLanguage = LCLDefaultLanguage
}
return defaultLanguage
}
/**
Resets the current language to the default
*/
public class func resetCurrentLanguageToDefault() {
setCurrentLanguage(self.defaultLanguage())
}
/**
Get the current language's display name for a language.
- Parameter language: Desired language.
- Returns: The localized string.
*/
public class func displayNameForLanguage(language: String) -> String {
let locale : NSLocale = NSLocale(localeIdentifier: currentLanguage())
if let displayName = locale.displayNameForKey(NSLocaleLanguageCode, value: language) {
return displayName
}
return String()
}
}
templateImage
//
// Images.swift
//
import Foundation
public extension String {
public var image: UIImage? {
return UIImage(named: self)
}
public var templateImage: UIImage? {
return UIImage(named: self)?.imageWithRenderingMode(.AlwaysTemplate)
}
public var originalImage: UIImage? {
return UIImage(named: self)?.imageWithRenderingMode(.AlwaysOriginal)
}
}
但是还有一个问题就是 图片选中的时候不能选择到选中的状态。
下篇解决。