首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Object-C黑魔法

1.NS_ASSUME_NONNULL_BEGIN && NS_ASSUME_NONNULL_END 在Swift存在Option类型,也就是使用?和!声明变量。...,也增加了两个相应特性,因此上例items属性可以如下声明: @property (nonatomic, copy, nonnull) NSArray * items; 当然也可以用以下这种方式:...复杂指针类型(id *)必须显示去指定是nonnull还是nullable。...老代码在需要和swift混编时,在新swift编译器下会给出一个警告。 nonnull不会影响性能。事实上,我们仍然可以在运行时去判断我们对象是否为nil。...NS_ENUM_AVAILABLE_IOS 从单词字面可以看出使用这个宏说明这个枚举开始IOS版本 IOS版本如下 7_0 代表7.0版本.用_替换 参数只有一个NS_ENUM_AVAILABLE_IOS

1.3K10

Swift

变量用var标识,常量用let标识 Swift对于空格敏感 Swift输出变量写法为\(变量/常量名) 在Swift,整形自己主动判断为Int,假设系统是32位系统,那么这个整形就是Int32,...假设是64位系统,那么就是Int64 假设须要特定整形数,则须要手动写上类型指定(:Int8) 在Swift浮点型默觉得double,假设想要float类型须要显示指定 在Swift不支持隐式转换...,假设想让两个不同类型数据进行运算,那么须要显示转换类型:类型名(常量/变量名) 变量名能够是汉字,符号等(仅仅要是Unicode字符都能够) 在Swift变量/常量名差点儿支持全部Unicode...:names.count 不可变数组(用let修饰)不能增删元素,但能够替换元素 tip:数组在定义时元素类型不一致,系统会默认该数组为NSArray 字典: 与OC不同,字典也用[]..._”替换变量/常量,就可以取出元组相应位置元素 假设同一时候满足多个case,除非case中含有fallthrough语句,否则仅仅运行第一条语句 循环语句: 语法: for 初值; 条件

2K10
您找到你想要的搜索结果了吗?
是的
没有找到

iOS开发之 Method Swizzling 深入浅出

(Class Clusters),一个NSArray实现可能由多个类组成。...所以如果想对NSArray进行Swizzling,必须获取到其“真身”进行Swizzling,直接对NSArray进行操作是无效。...) 注:对于 Swift 自定义类,因为默认并没有使用 Objective-C 运行时,因此也没有动态派发方法列表,所以如果要 Swizzle Swift 类型方法的话,是需要将原方法和替换方法都加上...再注:下面这个例子使用了 Objective-C 动态派发,对于 NSObject 子类(UIViewController)是可以直接使用,并不是 Swift 自定义类,因此没有加 dynamic...Method Swizzling Objective-C 与 Swift 异同 区别 Objective-C Swift Runtime 头文件 #import

2.3K70

窥探Swift之数组与字典

Swift也不例外,Swift数组使用起来还是比较人性化. 1.数组声明与创建 在聊SwiftArray声明创建之前,我想聊一下ObjC数组声明与创建,下方是ObjC不可变数组和可变数组创建方式...在ObjC可以使用NSArray来声明不可变数组,使用NSMutableArray来声明可变数组。...Swift可变数组几种方式。...下图是在ObjCNSArray操作后结果,你不能对NSArray元素进行修改,也就是说你对NSArray操作权限只有读权限,没有写权限。...在Swift可变数组和不可变数组归根结底还是变量和常量也就是var和let关键字使用了。你对变量持有读写权限,对常量持有读权限。

1.9K90

OC - 属性关键字和所有权修饰符

这些关键字可以用于属性、方法返回值和参数,来指定对象可空性,这样编写代码时候就会智能提示。在 Swift 可以使用!和?...为了安全起见,苹果还制定了以下几条规则: typedef类型可空性通常依赖于上下文,即使在 Audited Regions 也不能假定它为nonnull; 对于复杂指针类型(id *)必须明确指定它可空性...2.编译器将为 weak 修饰属性生成带 __weak 所有权修饰符实例变量。...2.编译器将为 unsafe_unretained 修饰属性生成带 __unsafe_unretained 所有权修饰符实例变量。...由于属性被声明为NSMutableArray类型,就不避免会有调用方去调用它添加对象、移除对象等一些方法,此时由于copy结果是NSArray不可变对象,对NSArray对象调用添加对象、移除对象等方法

1.3K31

Objective-C属性(property)特性(attribute)

时候就照葫芦画瓢。 现在大伙儿慢慢转向苹果新开发语言Swift,似乎亦不必花太多时间在Objective-C上。...(Swift有类似的「Computed Properties/计算属性」) 所以,在没有Objective-C2.0@property之前,我们几乎需要为所有的实例变量,手动写getter和setter...后来,不需要为属性声明实例变量了,@synthesize会默认自动生成一个「下划线+属性名」实例变量。...所有有mutable(可变)版本属性类型,NSString, NSArray, NSDictionary等等——他们都有可变版本类型:NSMutableString, NSMutableArray...为了更好地和Swift混编(配合Swiftoptional类型),在Xcode 6.3,Objective-C新增了一个语言特性,nullability。具体就是以上4个新特性。

1.9K30

16.Swift学习之结构体

可以通过属性名称传递到成员构造函数 let vga = Resolution(width: 640, height: 480) 结构体是值类型 值类型是一种当它被指定到常量或者变量,或者被传递给函数时会被拷贝类型...Swift 结构体是值类型,那么它在代码传递总是被拷贝 //创建一个结构体 let hd = Resolution(width: 1920, height: 1080) //值类型拷贝 var cinema...print("hd is still \(hd.width) pixels wide") 字符串,数组和字典赋值与拷贝行为 Swift String , Array 和 Dictionary类型是作为结构体来实现...,这意味着String , Array 和 Dictionary在它们被赋值到一个新常量或者变量,或它们本身被传递到一个函数或方法时候,其实是传递了拷贝。...NSString, NSArray和 NSDictionary,它们是作为类来实现,所以NSString , NSArray 和 NSDictionary实例总是作为一个引用而不是拷贝来赋值和传递。

31020

iOS - 关于 KVC 一些总结

默认实现调用每个键值对setValue:forKey:方法 ,会根据需要用nil替换NSNull对象。...备注: @max和@min根据右键路径指定属性在集合搜索,搜索使用compare:方法进行比较,许多基础类 (NSNumber类) 中都有定义。...数组运算符 根据运算符条件,将符合条件对象以一个NSArray实例返回。 @unionOfObjects 读取集合每个元素右键路径指定属性,放在一个NSArray实例并返回。...@distinctUnionOfArrays 读取集合每个集合每个元素右键路径指定属性,放在一个NSArray实例,将数组进行去重后返回。...注意: 因为Swift所有属性都是对象,所以这里仅适用于Objective-C属性。 当进行赋值setValue:forKey:时,如果key数据类型是非对象类型,则value就禁止传nil。

1.8K10

GB代码规范1.0

= @"" 对于局部变量尽量初始化 局部变量要初始化 属性有默认值 所以我们不必须对于属性进行初始化 我之前遇到一个BUG就是int类型没有初始化给我默认Nan造成崩溃 建议写法 int...可以精简代码 当执行方法很多 用变量替换 建议写法 NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults]; [userDefault...(NSArray *)customViews { return @[customView1,customView2]; } @end 非要在自己类分类添加读写属性 可以用语法糖 可以利用主类私有变量...]; } 如果后台返回list为字段 这段代码就崩溃了 可以使用try catch也可以用Model库 或者自己添加判断 使用dispatch_once来创建例 建议写法 + (instancetype...数组和字典最好指定元素类型 建议写法 NSArray *names = [NSArray array]; 不建议写法 NSArray *names = [NSArray array

1.2K20

iOS工程师必看 20 道 面试题

copy一般用在修饰有可变对应类型不可变对象上,NSString, NSArray, NSDictionary。...他们遵循基本原则是:高级别的变量不允许被定义为低级别变量成员变量。比如一个 private class 不能含有 public String。...反之,低级别的变量却可以定义在高级别的变量。比如 public class 可以含有 private Int。 Open 具备最高访问权限。...在Swift和Objective-C混编项目中,如何在Swift文件调用Objective-C文件已经定义方法?如何在Objective-C文件调用Swift文件定义方法?...Swift,初始化方法必须保证所有optional成员变量都完成初始化。同时新增convenience和required两个修饰初始化方法关键词。

3.6K40

常用开发技巧系列(六)

UIColor,在iOS是没有直接方法初始化,所以很多时候安卓同学用16进制iOS还要RGB就会很麻烦,下面是根据两个类别方法,OC版本: + (UIColor *)colorWithRGBHex...: self.backgroundColor = UIColor.init(hexString: "F9F9F9") 3、在给一个单色取RGBUIColor类别方法 OC版本 Swift...标卡到底能不能用这个东西我以前也没有确认过,不过最近通过官方渠道确认了一下,在购买开发者账号时候我们可以看到支付类型就一个visa或者MasterCard两种,然后我们就会找带这两个标识信用卡来支付...,然后有些成功了有些会遇到支付失败问题,其实就是这个标双标的问题或者有没有开通国际支付功能引起,还有网上有些可以使用苹果支付完全是没有根据,下面这两张聊天截图可以把这个问题说清楚: ?...2、->是访问成员变量,但成员变量默认受保护,所以常常报错,手动设为public即可解决 五: Swift版本CGD定时器 经常用经常忘记怎么写我还得经常去查找,记录在这里方便自己查找

70111
领券