1.跨語言(object-c,C++,C)全局變量和函數(shù)
在object-c層面聲明為extern的; 然后在對應的頭文件中定義實際內(nèi)容。例子:
//ConstVarible.h中的內(nèi)容
#pragma mark - 默認的app更新下載地址
extern const int itunesId;
extern const NSString *kNornalAppAddress;
extern const NSString *kBaseURL;
//函數(shù)也是一樣的,


//ConstVarible.m或者.c .cpp中的內(nèi)容
const int itunesId = 923818540;
const NSString *kNornalAppAddress = @"https://itunes.apple.com/us/app/xian-ren-zhang-gu-piao/id923818540?l=zh&ls=1&mt=8";
然后在對應的跨語言頭文件中import該頭文件,項目的pch文件中import頭文件,即兩種語言使用同一個實體全局變量。

2.類和函數(shù)的靜態(tài)變量:
由于沒有提供class中直接static變量的辦法,所以轉(zhuǎn)用內(nèi)部定義一個結構體,然后結構體中定義static變量,我的習慣是:
struct STATIC{
            static var headerHeight:CGFloat = 0
        }
        if STATIC.headerHeight == 0{
            STATIC.headerHeight = self.tableView(timeTable, heightForHeaderInSection: indexPath.section)
        }
3.MVVM或者MVC中的變量使用:
你可能想過這種辦法:
extension UIView{
    var originX:CGFloat{
        getreturn self.frame.origin.x }
        set{
            var tmpFrame = self.frame
            tmpFrame.origin.x = newValue
            self.frame = tmpFrame
        }
    }

但是我保證你還沒有想到這個辦法:
class HotThemesVC: BaseLoadingEmptyVC {
    var data:Array<MotifsEntity>!{
        get{
            return tableDD.data
        }
        set{
            tableDD.data = newValue
        }
    }
}
這樣做,在當前類中使用的data就變成了對應的tableDD中得data,不再受語法干擾,類似python中得import ...效果。

4.typealias 可傳遞類型定義:

class TopicTableVC:UIViewController{
    typealias RowDataType     = ThemesTableVC.RowDataType
    typealias TableData       = ThemesTableVC.TableData
    typealias CellType        = ThemesTableVC.CellType
}

class ThemesTableVC{
    typealias RowDataType     = PortfoliosEntity
    typealias TableData       = Array<RowDataType>
    typealias CellType        = CombinationCell
}
這一招我是從C++的STL中得traits技術上學來的
5.tuple的使用,swift新增了元組類型,python的招式。可以直接傳遞元組作為參數(shù),這在傳遞多個對象但是由不愿意從新去定義一個結構體(含有這些參數(shù)作為成員)時,非常有用。。當然了,也可以直接返回元組,甚至是函數(shù)或者閉包的元組。例如我在計算日期的時候,就經(jīng)常這樣:
let (year, month, day) = caculate("20140130")

6.Optional的使用,一個變量聲明為:
var x:Int? = nil
其本質(zhì)為 Optional<Int> *x, Optional是一個模板,要么返回對象本身(使用?或者!進行解包的時候),要么返回none告知if語句這個東西是空的。
所以使用習慣是:
if let a = x {
//x指向?qū)嶋H內(nèi)容,而不是空指針。這在很多時候用得著,比如一個UIView要使用導航控制器,但是有時候也有可能是nil的時候。
}

7.延遲初始化:在首次使用的時候才初始化,如果變量依賴于對象的某些特性,這個很有用,我經(jīng)常這樣創(chuàng)建一些view,這樣節(jié)省性能。
class A:NSObject{

lazy var topView: ThemesTopView! = { return ThemesTopView.instance() }()

}

8.判斷對象的類型:不再使用isKindOfClass。
    func pushToDetail<T>(result:T){
        isPopedFromNav = true

        var vc:UIViewController! = nil
        if result is SStockDataEntity{
            let model = result as SStockDataEntity
            let stockModel = XRZStockModel()
            (stockModel.name, stockModel.code) = (model.name, model.code)
            vc = XRZStockMarketViewController(stockMarkStyle: StockMarketStyle.OneStockMarketStyle, withStocks: [stockModel], withPage: 0);
        }else if result is SPortfoliosDataEntity {
            let model = result as SPortfoliosDataEntity
            MobClick.event("search_result")
            vc = XRZGroupDetailsViewController();
            (vc as XRZGroupDetailsViewController).groupId = "\(model.id)"
            (vc as XRZGroupDetailsViewController).setTitle(model.name, andColorIndex:0)
        }else{
            let model = result as SUserDataEntity
            vc = XRZFinancialViewController(nibName: "XRZFinancialViewController", bundle: nil)
        }

        self.vm?.navigationController?.pushViewController(vc, animated: true)
    }