iOS新特性

來源:互聯網
上載者:User

標籤:

//1、聲明屬性可以為空白的三種寫法:

1、@property (nonatomic, copy, nullable)NSString *name;2、@property (nonatomic, copy)NSString *_Nullable name1;3、@property (nonatomic, copy)NSString *__nullable name2;

 //2、聲明屬性可以為空白的三種寫法:

1、@property (nonatomic, copy, nonnull)NSString *name4;2、@property (nonatomic, copy)NSString *_Nonnull name5;3、@property (nonatomic, copy)NSString *__nonnull name6;

註: 以上三種寫法第一種寫法用的最多,後兩種基本不怎麼用

//3、在NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END之間,定義的所有對象屬性和方法預設都是nonnull

NS_ASSUME_NONNULL_BEGIN @property (nonatomic, copy, nullable)NSString *name; @property (nonatomic, copy)NSString *_Nullable name1; @property (nonatomic, copy)NSString *__nullable name2;NS_ASSUME_NONNULL_END

 //4、在方法中的用法如下:

- (nonnull NSString *)test:(nullable NSString *)str;- (NSString * _Nonnull)test1:(NSString * _Nonnull)str;
5、null_resettable的使用:
null_resettable: get:不能返回為空白, set可以為空白
如果使用null_resettable,必須重寫get方法或者set方法,處理傳遞的值為空白的情況如下(setter或getter實現其一即可)
@property (nonatomic, copy, null_resettable)NSString *name;//實現setter方法- (void)setName:(NSString *)name{    if (name == nil) {        name = @"123";    }    _name = name;}//實現getter- (NSString *)name{    if (_name == nil) {        _name = @"123";    }    return _name;}
6、聲明數組中對象的類型:在類型後面增加<資料類型 *>,之後如果資料中插入非字串類型會出現警告、崩潰
@property (nonatomic, strong)NSMutableArray<NSString *> *dataArray;
7、__kindof使用:__kindof:表示當前類或者它子類,
__kindof書寫格式:放在類型前面,表示修飾這個類型(__kindof Person *),
__kindof  :在調用的時候,很清楚的知道傳回型別。
註:當然也可以寫+ (instancetype)person;傳回值是instancetype就好了,
舉例:建立一個Person類
//.h中@interface Person : NSObject+ (__kindof Person *)person;+ (Person *)person1;@end//.m中@implementation Person//表示返回資料類型是person或其子類對象+ (__kindof Person *)person{    return [[self alloc] init];}+ (Person *)person1{    return [[self alloc] init];}@end//建立Person子類SonPerson@interface SonPerson : Person @end//此時SonPerson調用父類方法+ (__kindof Person *)person則返回SonPerson對象//正常返回 SonPerson *son = [SonPerson person];//返回的對象是Person對象SonPerson *son1 = [SonPerson person1];
8、__covariant(協變),__contravariant(逆變)__covariant(協變):用於泛型資料強轉類型,可以向上強轉,子類 可以轉成 父類__contravariant(逆變):用於泛型資料強轉類型,可以向下強轉, 父類 可以 轉成子類執行個體:建立Language類,同時建立IOS、JAVA兩個類繼承自Language,在建立Person類,其中Person類代碼:
#import <Foundation/Foundation.h>#import "Language.h"#import "IOS.h"//聲明泛型@interface Person<__contravariant ObjectType> : NSObject//語言@property (nonatomic)  ObjectType language; //id:任何對象都能傳進來 //Language:在外面調用的時候,沒有提示 //IOS* 以後只能傳對象- (ObjectType)language;- (void)setLanguage:(ObjectType)language; @end //controller中 Person<Language *> *p = [[Person alloc] init]; Person<IOS *> *iosP = [[Person alloc] init]; // 如果子類想給父類賦值,協變 iosP = p; // 泛型沒有確定,就是id類型 iosP.language = [[IOS alloc] init];

ps:暫時就是一些簡單應用

 

iOS新特性

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.