Xcode 編程,Objective-C 宏定義
/*1. 讓宏定義有提示
#define kClassAttributeString(objc, path) objc.path
>1.分析宏定義的本質是,每輸入一個字母,就進行拷貝翻譯成後面的形式
>2.所以當我們第第一個參數 輸入 self 的時候,翻譯 成 代碼就是 self. 那麼後面就會有提示,也就是輸入宏定義的 path參數的時候,其實代碼是就已經變成了 self. 什麼 那麼path 就自然有提示了
*/
/*2. 得到屬性的 C 字符串
#define kClassAttributeString(objc, path) (objc.path, #path)
>1這裏我們想得到的是 屬性的 字符串 可以使用 宏定義中的 # 這個表示後面的參數變成"" 的C字符串,然而我們又想有提示,那麼就使用 逗號運算符號 , 表示最右邊的是結果
*/
/*3. 忽略掉 , 逗號運算的前面的東西,讓編譯的時候不報警告
#define kClassAttributeString(objc, path) ((void)objc.path, #path)
>1但是我們想忽略掉前面的參數,因爲那些用宏定義會變成 (self.view.frame, "frame") 但是 self.view.frame 是一個get方法,沒有接受的容器,會報警告,那麼我們可以使用(void)忽略掉
*/
/*4. 加入 @ 得到 OC 字符串
#define kClassAttributeString(objc, path) @(((void)objc.path, #path))
也可以這樣寫
#define kClassAttributeString(objc, path) ((void)objc.path, @#path)
>1加上 @ 得到OC的字符串
*/
//運用到KVO,KVC 能夠拿到屬性的字符串表示,又可以有提示
#define kClassAttributeString(objc, path) @(((void)objc.path, #path))