1.跨语言(object-c,C++,C)全局变量和函数
在object-c层面声明为extern的; 然后在对应的头文件中定义实际内容。例子:
//ConstVarible.h中的内容
#pragma mark - 默认的app更新下载地址
extern const int itunesId;
extern const NSString *kNornalAppAddress;
extern const NSString *kBaseURL;
//函数也是一样的,


//ConstVarible.m或者.c .cpp中的内容
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.类和函数的静态变量:
由于没有提供class中直接static变量的办法,所以转用内部定义一个结构体,然后结构体中定义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的招式。可以直接传递元组作为参数,这在传递多个对象但是由不愿意从新去定义一个结构体(含有这些参数作为成员)时,非常有用。。当然了,也可以直接返回元组,甚至是函数或者闭包的元组。例如我在计算日期的时候,就经常这样:
let (year, month, day) = caculate("20140130")

6.Optional的使用,一个变量声明为:
var x:Int? = nil
其本质为 Optional<Int> *x, Optional是一个模板,要么返回对象本身(使用?或者!进行解包的时候),要么返回none告知if语句这个东西是空的。
所以使用习惯是:
if let a = x {
//x指向实际内容,而不是空指针。这在很多时候用得着,比如一个UIView要使用导航控制器,但是有时候也有可能是nil的时候。
}

7.延迟初始化:在首次使用的时候才初始化,如果变量依赖于对象的某些特性,这个很有用,我经常这样创建一些view,这样节省性能。
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)
    }