分類與擴(kuò)展區(qū)別 Obj-C剧董、Swift

Obj-C 擴(kuò)展

  • 在OC中經(jīng)常會(huì)使用擴(kuò)展,如下在.m文件中茫负。

1. @interface 類名后面加()

2. 擴(kuò)展中自動(dòng)生成實(shí)現(xiàn)【get蕉鸳、set方法 以及 聲明一個(gè)成員變量,成員變量命名會(huì)在屬性名的前面加一個(gè)_】

3. oc中定義私有屬性的方式∪谭ǎ【那私有方法呢潮尝???直接寫(xiě)實(shí)現(xiàn)呀,還要定義干嘛饿序?】

#import "ViewController.h"
@interface ViewController ()
@property (nonatomic, strong) UIView *view1;

@end

@implementation ViewController

- (void)viewDidLoad {
    _view1 = [[UIView alloc]init];
    [self.view addSubview:_view1];
}

@end

<?php 
echo "Hello World!"; 
?> 

Obj-C 中的分類

  • 我這里新建了一個(gè)Person對(duì)象勉失。里面什么都沒(méi)有然后寫(xiě)了個(gè)Person的分類Person(addition)
  • 分類中只能定義方法
  • ()必須有名稱

.h文件

#import "Person.h"

@interface Person(addition)
@property (nonatomic, assign) int year;
@end

.m文件

#import "Person+addition.h"

@implementation Person(addition)

@end

ViewController中創(chuàng)建對(duì)象并且進(jìn)行打印。

#import "ViewController.h"
#import "Person+addition.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    Person *p1 = [[Person alloc]init];
    p1.year = 11;
    NSLog(@"%d",p1.year);
}

這個(gè)異常信息,它通常是消息接收者找不到對(duì)應(yīng)的@selector()方法原探。意思是get set方法都沒(méi)有乱凿。

image
image

其實(shí)Xcode已經(jīng)提示了顽素。沒(méi)有定義set 和get 方法【其實(shí)連申明都沒(méi)有因?yàn)開(kāi)year找不到~~】。我感覺(jué)這里報(bào)錯(cuò)會(huì)比較合適徒蟆。??

image

但是呢胁出。?? 使用@synthesize year手動(dòng)創(chuàng)建 set year ivar呢?會(huì)報(bào)錯(cuò)段审∪【所以想要擴(kuò)展屬性還是乖乖的用runtime吧】

image

可以寫(xiě)@property (nonatomic, assign) int year;但是沒(méi)有定義屬性,只能寫(xiě)set 和get方法那如何應(yīng)用呢??

如何使用寺枉。

  • Person.h
#import <Foundation/Foundation.h>

@interface Person : NSObject
@property (nonatomic, assign) int year;
@end
  • Person.m文件文件沒(méi)有內(nèi)容
  • Person+addition.h文件
#import "Person.h"

@interface Person(addition)
@property (nonatomic, assign) int theYear;

-(int)theYear;
-(void)setTheYear:(int)theYear;

@end
  • Person+addition.m文件
#import "Person+addition.h"

@implementation Person(addition)

-(int)theYear{
    return self.year + 1;
}
-(void)setTheYear:(int)theYear{
    self.year = theYear;
}

@end

其實(shí)就是用 set get 方法進(jìn)行一些操作抑淫。比如對(duì)里面屬性賦值呀。運(yùn)算等姥闪。

  • ViewController.m 中使用
#import "ViewController.h"
#import "Person+addition.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    Person *p1 = [[Person alloc]init];
    p1.theYear = 1;
    NSLog(@"myYear:%d",p1.year);
    NSLog(@"year:%d",p1.theYear);
}


@end

打印結(jié)果


image

Swift

  • Swift中是沒(méi)有分類的丈冬。只有擴(kuò)展哦。
  • 和OC中的分類又點(diǎn)類似甘畅,不能定義屬性,用起來(lái)像是屬性但是呢 其實(shí)就是get 和set方法往弓。但是本身不是屬性疏唾。
  • 可以在擴(kuò)展中定義方法。
  • 呢么看Swift中的擴(kuò)展簡(jiǎn)直就是簡(jiǎn)單粗暴函似。
import UIKit

class Person: NSObject {
    var myYear:Int = 0;
}


extension Person{
    var year:Int{
        get{
            return myYear;
        }
        set{
            
            myYear = 22
        }
    }
    
    func log() {
        print("打印下")
    }
}

Person的使用

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let p1 = Person()
        print(p1.year);
    }

}

Swift中的擴(kuò)展用法和OC的分類類似槐脏。而OC的擴(kuò)展基本就是用于創(chuàng)建私有屬性。 由于Swift中私有屬性都是 private來(lái)申明的所以就沒(méi)了撇寞?


最后 OC中的分類中的結(jié)構(gòu)體有幾個(gè)屬性顿天?

這里不寫(xiě)代碼了,其實(shí)在我們經(jīng)常使用的代碼里就有了蔑担。說(shuō)一個(gè)現(xiàn)象可能就想到了牌废,那就是不能對(duì)frame的中的屬性直接復(fù)制,這是為啥呢啤握?

看下面截圖鸟缕。

  • 原來(lái)frame是在分類中,呢么按照剛說(shuō)的排抬,先不管結(jié)構(gòu)體懂从。呢么肯定了我們使用的是get 和set 方法,而不是屬性蹲蒲。
  • 而CGRect是一個(gè)結(jié)構(gòu)體番甩。
  • 所以我們只能進(jìn)行set方法了。就有了我們平時(shí)的寫(xiě)法 self.view.frame = CGRectMake(0, 0, 0, 0);所以呀結(jié)構(gòu)體里是沒(méi)有屬性的届搁,我們只是把結(jié)構(gòu)體當(dāng)做參數(shù)拿來(lái)對(duì)UIView中的一些屬性進(jìn)行了操作缘薛。
    image
image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末窍育,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子掩宜,更是在濱河造成了極大的恐慌蔫骂,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牺汤,死亡現(xiàn)場(chǎng)離奇詭異辽旋,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)檐迟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)补胚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人追迟,你說(shuō)我怎么就攤上這事溶其。” “怎么了敦间?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵瓶逃,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我廓块,道長(zhǎng)厢绝,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任带猴,我火速辦了婚禮昔汉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拴清。我一直安慰自己靶病,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布口予。 她就那樣靜靜地躺著娄周,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沪停。 梳的紋絲不亂的頭發(fā)上昆咽,一...
    開(kāi)封第一講書(shū)人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音牙甫,去河邊找鬼掷酗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛窟哺,可吹牛的內(nèi)容都是我干的泻轰。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼且轨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼浮声!你這毒婦竟也來(lái)了虚婿?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤泳挥,失蹤者是張志新(化名)和其女友劉穎然痊,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體屉符,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡剧浸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了矗钟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唆香。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖吨艇,靈堂內(nèi)的尸體忽然破棺而出躬它,到底是詐尸還是另有隱情,我是刑警寧澤东涡,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布冯吓,位于F島的核電站,受9級(jí)特大地震影響疮跑,放射性物質(zhì)發(fā)生泄漏组贺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一祸挪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贞间,春花似錦贿条、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至峻仇,卻和暖如春公黑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背摄咆。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工凡蚜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吭从。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓朝蜘,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親涩金。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谱醇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 503 7672 好喝不貴暇仲,適口為珍。
    靈靜自遠(yuǎn)閱讀 182評(píng)論 0 0
  • 我連做夢(mèng)也感覺(jué)受傷 一年過(guò)了 還是一天 計(jì)算著慌張 計(jì)程車上的音響 我們最愛(ài)的情歌 這一刻卻重重?fù)羝扑寄畹?心臟 ...
    MrairC閱讀 219評(píng)論 0 0
  • 今天早上她推開(kāi)門(mén)副渴,滿目刺眼的白讓她吃了一驚奈附,雪很厚,踩上去發(fā)出咯吱咯吱的聲音煮剧,堪與老家的大雪相當(dāng)斥滤。 不遠(yuǎn)處,花壇劃...
    指尖上的獨(dú)角獸閱讀 581評(píng)論 0 1
  • 《一出好戲》上映了轿秧,這部黃渤執(zhí)導(dǎo)的電影中跌,前期宣傳到位,各大綜藝菇篡,以及黃渤等人自帶人品漩符,這部電影未播已經(jīng)先火...
    SL_28f6閱讀 192評(píng)論 2 2