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

Swift基础语法(四)

当请求成功时,data参数包含response中的数据,error是nil;当发生错误时,error指明具体的错误,data为nil。...这里的Success代表正确执行的值,Failure代表出现问题时的错误值。...Swift中没有原生的KVC概念,但是可以利用KeyPath来间接地实现KVC。 如果要使用KeyPath,则类必须继承自NSObject,否则不能用。...Swift 1,新建一个Objective-C项目 2,创建一个Swift的类,继承自NSObject,此时也会有上面的提示,选择Create Bridging Header 3,此时项目中会多出两个文件...Swift中的类名的完整形式是:“命名空间+类名”,我们可以尝试在类中打印当前类来查看一下完整名字: class ViewController: UIViewController { override

3.9K20

swift4.0语法杂记(精简版)

通常情况下,定义类时,让它继承自NSObject,若没有指定父类,那么该类就是rootClass。...Httptool类的属性,设置一个初始化值,将初始值赋值给变量 在swift中是不需要引入头文件的,文件之间可共享 import UIKit class ViewController: UIViewController...在swift中,用到了大量的结构体,比如说基本的数据类型都是结构体而不是类。这意味着它们被赋值给新的常量或者变量,或者被传入函数或方法中时,值会被拷贝。...其中某些方法或属性并不是开发者所需要的。这会让代码变得异常的臃肿。 若一个类拥有很多父类,会让开发者很难找到每个类中的问题并进行修改。...在 Swift 3 中,编译器会在很多地方为我们隐式的加上 @objc,例如当一个类继承于 NSObject,那么这个类的所有方法都会被隐式的加上 @objc。

15.4K90
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    iOS开发·runtime原理与实践: 消息转发篇(Message Forwarding) (消息机制,方法未实现+API不兼容奔溃,模拟多继承)

    如果上面两步都通过了,就开始查找这个类的实现IMP,先从cache里查找,如果找到了就运行对应的函数去执行相应的代码。 如果cache中没有找到就找类的方法列表中是否有对应的方法。...如果类的方法列表中找不到就到父类的方法列表中查找,一直找到NSObject类为止。 如果还是没找到就要开始进入动态方法解析和消息转发,后面会说。 其中,为什么它被称为 “转发”?...例如:我们可以为了避免直接闪退,可以当消息没法处理时在这个方法中给用户一个提示,也不失为一种友好的用户体验。 其中,参数invocation是从哪来的?...当一个对象由于没有相应的方法实现而无法响应某个消息时,运行时系统将通过forwardInvocation:消息通知该对象。...]; [self.view addSubview:tableView]; } 其中有一行会发出警告,Xcode也给出了推荐解决方案,如果你点击Fix它会自动添加检查系统版本的代码,如下图所示:

    2.1K11

    AsyncDisplayKit 2.0 教程:入门「译」

    对象生命周期:创建,操纵和销毁系统对象(即创建一个UIView) 当正确使用时,AsyncDisplayKit 允许您在默认情况下异步执行所有测量、布局和渲染。...免费App排行榜前100大多数都没有使用Swift(至少6个使用ASDK)。出于这些原因,本系列将重点介绍 Objective-C。话虽这么说,我们已经包括了一个Swift版本的实例项目。...认识一个 node 的最佳方法是参照你已经熟悉的 UIViews 和 CALayers 之间的关系。 记住,iOS应用程序中的所有在屏幕上的显示都通过CALayer对象表示的。...这些类包括: ASViewController:一个 UIViewController 的子类,允许你提供要管理的 Node。...现在,就可以在用户的垂直和水平滑动下,充分发挥二维预加载的功能! 要查看这个 AsyncDisplayKit 2.0 教程完整的项目,点击这里进行下载。如果你想查看swift版本,这里也有。

    2.2K20

    iOS - 开发1年后对MVC新的理解

    @end 问题来了回到工程项目需求,每个cell都有增加减少按钮 而且需要有选中效果在View层.意味着MVC架构模式中 我在View层对Model进行了修改....再者Action操作视图逻辑代码是放在C层或V层 最终导致C层随着需求会慢慢变大变臃肿 再回过头来看项目工程目录导致VC过重的原因因素 ·繁重的UI 例如tableView CollectionView...·业务逻辑 如下面的全选效果 ·网络请求 ·代理方法 优化代码 封装一个继承自NSObject的类,遵循DataSource代理 @interface Controller() @property(...使用GCD单例创建管理对象》 第二种玩法是通过Swift混编,我们来对比一下Model层的不同 定义 OC层 @interface Model : NSObject @property (nonatomic...架构 (Model和UI之间的消息通讯方式) 在上面我们把DataSource麻烦的代码交给了封装的DataSource类中,但是还剩下一个Delegate代理没解决 MVC (最快上手架构) MV-Protocal

    1.2K71

    使用流动控制器(Flow Controller )实现 MVVM 协议模型

    流之间的通信是通过一个共同的、可以传递窗口引用或导航控制器的对象,那可以让你创造出不同流的导航。...一开始评估时可能只会看到部分细节, 然而事实是等待 Xcode 翻译、组织项目浪费了许多时间。...相反,不使用它的结果才是值得我们担心的。在下个项目中我将考虑不使用它,这只不过是一个本地代码的 XML 表示。在一个项目合并复杂性和构建时间逐渐增长的成熟团队中,我认为每个人都应该思考一下这个。...在下一节中,我讲讲实验的结果。 结果 第一步是把 Storyboards(左边启动屏的)和其他不会使用的东西去掉。然后只在应用启动时开始系统流程。...这需要这些实体之间的代码耦合更具优势。 我们可以看到在 OwlsFlowController 案例中,通过配置选择是否在网格还是列表中显示数据,在本例中是固定的,但它可以有两种测试情况。

    1K40

    优雅的使用UITableView

    痛点 在我们iOS开发中UITableView几乎是所有App都会使用的一个UI控件,因为业务的需要,我们常常会注册多种Cell,然后在 - (UITableViewCell *)tableView:(...抽象一个父类 **缺点:** 虽然三个VC看似UI上有很多共同之处,但是其中的业务处理完全不同的 抽象一个UIHelper用于构建UI **缺点:** 这种方案看似很好了,但是你看如果在一个界面中,如果添加一个或者减少一个控件...响应链可以解决的问题: 扩大相应区域 超出父类视图相应依然可以传递 垮图层传递事件 找到UIView的UIViewController - (UIViewController *)viewController...; } ButtonCell事件绑定代码: [image.png] 这里我们还是要用一个协议的: [image.png] 注意 用这个协议主要是方便代码的阅读,而且在Swift中是必须使用协议的,因为编译时找不到这个方法...部分,List部分我会在demo中给出 关于Detail和List的概念我会在第三节中介绍,第二节是Swift版的思路,Swift可以用到泛型,代码更优雅。

    99700

    Swift-MVVM 简单演练(一)

    ---- 上拉刷新 现在多数APP做无缝的上拉刷新,就是当tableView滚动到最后一行cell的时候,自动刷新加载数据。...代理的合核心是解耦,当一个控件可以不停的被复用的时候就选择代理,比如TableViewDelegate中的didSelectRowAt indexPath:该方法是可以在任何地方只要创建TableView...总结 使用代理传递消息是为了在控制器和视图之间解耦,让视图能够被多个控制器复用,如TableView 但是,如果视图仅仅是为了封装代码,而从控制器中剥离出来的,并且能够确认该视图不会被其它控制器引用,...字典转模型逻辑 上拉 / 下拉数据处理逻辑 下拉刷新数据数量 本地缓存数据处理 初体验 因为MVVM在swift中都是没有父类的,所以先说下关于父类的选择问题 如果分类需要使用KVC或者字典转模型框架设置对象时...,类就需要继承自NSObject 如果类只是包装一些代码逻辑(写了一些函数),可以不用继承任何父类,好处: 更加轻量级 HQStatusListViewModel.swift不继承任何父类 /// 微博数据列表视图模型

    10.3K51

    iOS 组件化-路由解耦思想 JLRoutes 实战篇(一)App内控制器跳转

    , Router 同样的, 使用前需要每台设备进行一次注册, Router 在内部保存每台设备的 URL, 不同设备之间需要交互时, 将消息发送到路由器中统一处理; 当控制器之间需要交互跳转时, 只需要将对应的..., 还会有 3D Touch 指定跳转到某个控制器中; App 之间跳转: URL Scheme, Universal Links方式; 可想而知 App 内不管是页面切换, 外部调用, 都会涉及到控制器的跳转...可以根据 Path 映射相应控制器制定的 Map 内, Map 里面最少包含当前控制器的参数如: {@"Class": @"控制器类名"}。..., 继承自 NSObject, 对外提供 注册和调用 Router 接口, 在内部调用 JLRoutes 提供的接口; 在项目中所有跳转均使用此类提供的接口来调用 Router; 一个是默认不带任何参数..., 点击通知等都会触发; 这些包含跳转, 页面切换的我们均可以统一使用 Router 来进行有效的管理, 使 App 变得更加动态化, 模块之间耦合度更低; 支持 H5 跳转 外部 Scheme 启动

    1.6K20

    27.Swift学习之与OC混编

    在目前iOS开发语言从Objective-C到Swift的过渡时期,开发中难免会碰到两种语言同时存在的情况,如果在同一个项目中,两种语言并存,那么该项目就是一个混合项目。...一、Objective-C的项目中调用Swift 新建一个Objective-C的iOS项目 创建一个Swift的类,继承自NSObject,这时候会有如下的提示,此时选择Create Bridging...Swift文件如下: class Person: NSObject { } 在Objective-C的类中导入头文件,注意此时导入的头文件是一个命名为项目名-Swift.h的头文件,而不是Bridging...项目中调用Objective-C 新建一个Swift的iOS项目 创建一个Objective-C的类,此时也会有如一中的文字提示,修改类文件如下: @interface Person : NSObject...Bridging Header文件导入类.png 直接在Swift文件中使用Objective-C里面定义的内容 import UIKit class ViewController: UIViewController

    1.2K10

    iOS系统架构及常用框架

    该项目旨在提供一个苹果的Reachability类的替代品,支持ARC和block的使用方式。...当引入此头文件后,便可以在程序里使用任何在UIKit里声明的类 CoreGraphics 它是iOS的核心图形库,平时使用最频繁的point,size,rect等这些图形,都定义在这个框架中,类名以CG...CoreAnimation中大量用到CoreGraphics中的类,原因是显然的,实现动画自然要用到图形库中的东西。 CoreText CoreText是用来文字排版和处理字体的一个高级的底层技术。...在Objective-C中,类也是用对象来表示的,而类的isa指针指向它的metaclass(存储静态成员变量和类方法)。 super_class指针:指向父类。 name:类名称。...,为处理响应事件和响应链,是NSObject图中最大分支的根类。

    7.8K21

    iOS 代码规范

    所以当在外部获取这个属性时,获取的只是内部可变型的一个不可变版本,例如: 在公共API中: @interface EOCPerson : NSObject @property (nonatomic,...:(NSIndexPath *)indexPath; 这个方法正确地体现了代理的作用:委托者(tableview)告诉代理(控制器)“我的某个cell被点击了”。...若要区分到底是哪个tableview的cell被点击了,就需要在 (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath...所有返回类对象和实例对象的方法都应该使用instancetype 将instancetype关键字作为返回值的时候,可以让编译器进行类型检查,同时适用于子类的检查,这样就保证了返回类型的正确性(一定为当前的类对象或实例对象...NSCache优于NSDictionary的几点: 当系统资源将要耗尽时,NSCache具备自动删减缓冲的功能。并且还会先删减“最久未使用”的对象。 NSCache不拷贝键,而是保留键。

    2.4K20

    iOS-代码规范

    所以当在外部获取这个属性时,获取的只是内部可变型的一个不可变版本,例如: 在公共API中: @interface EOCPerson : NSObject @property (nonatomic, copy...:(NSIndexPath *)indexPath; 这个方法正确地体现了代理的作用:委托者(tableview)告诉代理(控制器)“我的某个cell被点击了”。...若要区分到底是哪个tableview的cell被点击了,就需要在`` (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(...所有返回类对象和实例对象的方法都应该使用instancetype 将instancetype关键字作为返回值的时候,可以让编译器进行类型检查,同时适用于子类的检查,这样就保证了返回类型的正确性(一定为当前的类对象或实例对象...NSCache优于NSDictionary的几点: 当系统资源将要耗尽时,NSCache具备自动删减缓冲的功能。并且还会先删减“最久未使用”的对象。 NSCache不拷贝键,而是保留键。

    2.2K20

    iOS - Swift 面向协议编程(一)

    OC无法做到面向协议开发,而Swift可以,因为Swift可以做到协议方法的具体实现,而OC不行 面向对象开发 传统的面向对象开发思维方式是将类中实现的相似方法抽取出来,接着放入一个Base类,然后继承于...eat() } 我们的Person类遵守协议LXFProtocol,需要我们实现协议中的方法,如: class Person: NSObject, LXFProtocol { func eat(...文件Eatable.swift,以区分LXFProtocol.swift Eatable.swift中的代码实现如下: import Foundation protocol Eatable {...协议方法的具体实现需要在extension中来实现 使Dog类遵守Eatable class Dog: NSObject, Eatable { } 这样我们就可以在其它地方轻松调用dog的eat方法...可以发现Swift的面向协议编程跟c++的多继承很相似 约束 现在的这个Eatable协议是可以被�任意遵守的,如果我们�有这么个需求,我们创建的协议只是被UIViewController遵守,那我们该怎么做呢

    70450

    动手写个 JSON-Model Mapping 库

    虽然用着还不错,但是它主要是为了避免手动解析 JSON 数据时大量的解包操作,降低解包不当导致 crash 的风险,感觉主要是注重安全性,易用性方面还是差了点。...object是一个计算属性,在给它赋值时,会对它的类型进行判断,然后把它的类型信息存储到实例属性type中(type是一个自定义的枚举类型,这个枚举类型基本对应了 Swift 中的几种基本类型),最后把...显示数据.png 使用就是这么简单,只要新建一个NSObject的子类,属性名保证跟 JSON 中的一致,并给各个属性一个初始值。...如果想另取属性名也是可以的,用计算属性就好了,譬如 Demo 中 publishtime 是不符合 Swift 属性命名规范的,我们不去改原 Model,而是用一个扩展: extension PostModel...要用到自己的项目中的话直接把 JSONModelMapper.swift文件或者连同HTTPManager.swift一起拖到项目中好了,因为实在“超轻量级”(简陋……),我觉得这样最方便了。

    1.2K30
    领券