写在前面 最近换了新公司,又是一个巨大的挑战 一是海外项目,二是协同,三是使用Swift 虽说Swift4.0已经很新了,但ABI的稳定进程还是放在了5.0,加上之前几乎没怎么用过Swift做过什么大型项目...所以本文都是使用的Swift 由于项目还要与国外的小伙伴合作,一些private的东西公司也不打算直接给他们,这不,就让我们做成library的形式提供给他们,对于我们来说也就是Framework了。...很快这个任务就落到我头上了,前期踩坑基本都是参照这篇比较新的文章 手把手教你高效快捷的创建Swift Framework 这篇已经几乎把该用到的内容都讲了。...我这边就主要讲一讲Framework的调试,包含第三方库的集成,目前使用的还是pod, carthage就暂时不说了,理论上比pod要更方便使用 准备工作 新建一个主工程,新建一个Framework工程...#忽略警告 use_frameworks!
返回原来的界面而不是 push 一个新的界面,所以也不能通过 segue 传值,解决方法我尝试了两种: 使用 static var 使用代理传值 使用 static var class MasterVC...,让人难以读懂,为什么这样的事情要在这个地方做,没有明显的道理;在 MasterVC 内部,仍然需要以 MasterVC.text 这样蹩脚的方式调用。...override func viewDidLoad() { super.viewDidLoad() } // MARK: - Pass Data...DetailVC else { return } guard let txt = textField.text else { return } vc.title = txt...override func viewDidLoad() { super.viewDidLoad() } // MARK: - Pass Data
一: Swift 网络数据请求与处理最常用第三方 又有时间出来装天才了,还是在学swift,从中又发现一些问题,这两天上网找博客看问题弄的真的心都累。...Git地址:https://github.com/Alamofire/Alamofire 第二个: SwiftyJSON 一个解析JSON数据的三方库,使用swift写的,中间帮你省去swift...它的安装使用在前面我的博客里面有些过,是最新安装的方法,我的也是不久前安装的,有需要的可以去看一下:地址---> http://www.cnblogs.com/taoxu/p/4964395.html...在导入的过程中,一定要注意你自己工程的最低版本要求和三方库的最高版本要求之间的差异,这个很容易忽略导致错误!我把自己的 cocoapods 的终端输入命令展示出来,确保是没问题,可行的!...尽量别做一个我知道那样可以,但我不知道为什么的孩纸哈!!还是给整个文件代码给大家看,完成清晰点!
命名空间namespace在C++、C#里面是一个常见概念,Swift中也引入了这样一个机制,下面来探索一下这个命名空间的来龙去脉。...一、为什么需要命名空间 简而言之一句话:为了避免命名的冲突 在开发中,尤其是在多模块开发中,很难保证模块之间的类名不会重复,为了保证不同模块下同名的类可以正常使用而不报错,引入命名空间来保证即使创建的类名一样...可以看出,Swift中的类名的完整形式其实是“命名空间+类名”。...下面对比一下Objective-C与Swift两种语言的实现方式。 由于Objective-C中没有命名空间,所以写起来很轻松。...中命名空间的存在,如果按照上述做法得不到想要的结果,这时候就需要想办法进行处理 //viewDidLoad中添加一个个控制器 override func viewDidLoad() { super.viewDidLoad
Swift 中的闭包有很多优化的地方: 1 根据上下文推断参数和返回值的类型 2 从单行表达式闭包中隐式返回 可以省略return 3 可以使用简化的参数如 $0 $1 意为从0或者1开始 4 提供了尾随闭包的语法...(这也是闭包中循环引用来源的原因) 下面我举一个简单的关于闭包循环引用的例子: 你定义了两个控制器:OneController和TwoController,OneController只是负责push...func FF1(a:String) //必须实现的 @objc optional func FF2(aa:String) //可以选择是否实现的 } /*在声明的protocol中为什么要用....FF1(a: "代理方法1") /* 为什么要 delegateOK.clickAction?...tempTableView }() //MARK: -数组懒加载 lazy var dataList: [String] = { print("我懒加载了") return
出现这个状态表示的是,现在有一个线程正在表 t 上请求或者持有 MDL 写锁,把 select 语句堵住了。 场景: ? 2....等 flush flush tables t with read lock; flush tables with read lock; 这两个 flush 语句,如果指定表 t 的话,代表的是只关闭表...在 session A 中,我故意每行都调用一次 sleep(1),这样这个语句默认要执行 10 万秒,在这期间表 t 一直是被 session A“打开”着。...你看到了,session A 先用 start transaction with consistent snapshot 命令启动了一个事务,之后 session B 才开始执行 update 语句。...带 lock in share mode 的 SQL 语句,是当前读,因此会直接读到 1000001 这个结果,所以速度很快;而 select * from t where id=1 这个语句,是一致性读
Swift 基本语法05-"String" Swift 基本语法06-数组和字典 1.let(常量)和var(变量)可选项的默认值 1.1 let(常量)的可选项没有默认值 1> 常量在使用之前要被初始化...简单的分支和三目的写法 2.1 分支 /** * 1.条件不需要括号'()'了 * 2.语句必须有括号'()'(else{ },OC类似的可以这样写->if x > 5 print("大于5"))...// 110 2> 可选项作为参数传递时需要注意的 override func viewDidLoad() { super.viewDidLoad() // 因为'x'和'y'...override func viewDidLoad() { super.viewDidLoad() // 因为'x'和'y'都是可选的,因此这里'y'可以传`nil`...的优先级 override func viewDidLoad() { super.viewDidLoad() let name: String?
usernameArray.contains(userName) } } 接下来该处理我们的RegisterViewModel了,我们声明一个username,指定为Variable类型,为什么是一个...message: "注册失败")) } } 我是直接把注册信息写入到本地的plist文件,写入成功就返回ok,否则就是 failed。...这种写法我参考了官方文档的写法,让大家知道有这种写法。但是我并不推荐大家使用这种方式,因为如果Controller中的元素很多的话,一个一个传过来是很可怕的。...接下来我们在LoginViewController.swift中写,它看来像这样子的: override func viewDidLoad() { super.viewDidLoad()...然后建立对应的ListViewController.swift、ListViewModel.swift文件,因为需要model类,所以创建了一个Contact.swift类,然后添加了contact.plist
现在这个公司的项目使用了Swift开发,我一直想在自己的项目中也运用Swift,但是一直也没有机会,所以这次能够使用Swift正儿八经的开发,我也是超级兴奋的。...所以从以后开始,我的iOS系列的文章会逐渐的与Swift语言越来越相关。不得不说只有实际开发才能发现Swift中等着我要去踩的坑还有很多。没辙了,爱他就拼命的去填坑吧。...刚入职的第一周写了个简单的页面来熟悉公司项目代码,并且了解下业务。做了一个电商方面相关的收货地址的选择。 今天就来讲讲Swift版本的地址选择器的构建。...构建思路 刚开始领导丢给我了一个数据库包含着中国地区的省市区关系,但是以前处理这个问题常用Plist文件来搞定,所以我也就偷懒懒得再去写Sql语句了,直接用一个Plist文件来处理。..."") } override func viewDidLoad() { super.viewDidLoad() subdivisionsPicker.pickerDelegate
枚举值特别多的时候,想每一个枚举值都具体注释提示的话,就只能在每个枚举上一行加上/// ···或/** ··· */,但是会让代码显得不整齐(可能是我强迫症?)...··· */ 这个方法很强大,这里只展示我们常用的 /** * 测试方法 * * 返回一个数组 * @param str1 传入的参数 * @return 返回一个数组 */ - (NSArray...mark - mark1 同时在新的 Xcode 的 MiniMap 中也能直接看到注释 mark2 - 未做提示注释 //TODO: ··· Swift一致 一般用来标识需要做的工作,TODO...也会在快捷导航栏中显示 - (void)viewDidLoad { [super viewDidLoad]; //TODO: 加载图片,做一个炫酷的效果 } TODO 警告注释...,不显示 - (void)viewDidLoad { [super viewDidLoad]; //TODO: 加载图片,做一个炫酷的效果 #warning Can
Apple给我们做好了桥接工作,不过,在OC项目中调用Swift,与在Swift项目中调用OC,处理的方式是不一样的。...ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad...为什么需要命名空间 简而言之就是一句话:为了避免命名上的冲突。 在开发中,尤其是在多模块开发中,很难保证模块之间的类名不会重复。为了保证不同模块下同名的类可以正常使用而不报错,此时就需要命名空间了。...func viewDidLoad() { super.viewDidLoad() print(self) // <NormanSwift.ViewController:...//根据类型创建对应的控制器 let vc = vcType.init() return vc } 总结 到这里,我们花了四篇文章的篇幅将常用的Swift基础语法介绍了一遍
1 创建三个视图控制器:FirstViewController、SecondViewController和ThirdViewController 2、修改FirstViewController.swift...的viewDidLoad override func viewDidLoad() { super.viewDidLoad() self.view.backgroundColor = UIColor.brown...的viewDidLoad override func viewDidLoad() { super.viewDidLoad() self.view.backgroundColor = UIColor.purple...} 4、修改AppDelegate.swift的didFinishLaunchingWithOptions func application(application:UIApplication,...rootViewController = tabBarController return true }
6EDD4AC9-47E3-401F-91A4-2DA836439787.png Demo开始之前,我们想想应该会使用到屏幕宽高等一些常用的值,在OC中,咱们可以使用PCH然后宏定义,然而在Swift中...override func viewDidLoad() { super.viewDidLoad() self.view.backgroundColor = bgColor...ImageView和一个Label,虽然数据是死的,但是在Swift中,另外一个类是可以直接访问另一个类中的变量的(如果没做任何保护的话),所以我们在配置cell的时候是可以直接赋值的,这里就不弄了,然后我们看创建表视图那一块...学了这么几天,我发现Swift还是比较容易入手的,下篇文章我会用一个小的项目,本人是做室内地图SDK的,这次的小项目是仿我OC写的SDK Demo,使用Swift和OC混编,集成百度地图SDK和自己的室内...在下篇文章中会讲讲,Swift项目已上github:https://github.com/qingmomo/Swift-die OC版的demo在我们官网:http://www.innsmap.com
二、代码实现 2.1 程序入口说明 Application/AppDelegate.swift文件中的@UIApplication注解,表示这个Class类是程序的入口 ?...() { super.viewDidLoad() // Do any additional setup after loading the view....三、上述示例swift与object-c的语法对比 3.1 创建视图类比 - Swift: UIView(XXX:) - OC: [[UIView alloc] initWithXXX:] 类名()...当编译器提示的时候,再添加,会对语境有更好的机会; 原因:闭包(类似于 OC block)需要使用self。 3.4 不需要; 除非多行代码语句写在同一行中。...如下图所示,我在注释中添加了MARK、TODO、FIXME标签前缀,这些特殊标记的锚点菜单将会显示在导航栏上,点击菜单即可跳转到对应注释的地方,非常方便。 ?
,CenterViewController.swift,MoreViewController.swift)用于TabBar的显示 1、接下来只需要在 AppDelegate.swift 文件里写code...makeKeyAndVisible() return true } func applicationWillResignActive(_ application: UIApplication...HomeViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //...{ super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } 更多的页面...func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view.
大家好,又见面了,我是全栈君。 有使用第三方库。因此,需要使用mix and match财产。 请指出错误,谢谢! rss 阅读器,非常easy的代码。仅仅是为了学习swift语言而写。...() { super.viewDidLoad() _isIOS7Version = UIDevice.currentDevice().systemVersion...64.0 : 0.0 // 获取到的屏幕的高度怎么也仅仅有self.view的高度。不是整个屏幕的高度了?...path } } return path }} 4. need a feed manager: FeedManager.swift import...() { super.viewDidLoad() self.title = _feedModel!.
2.jpg Swift对于一门新的iOS编程语言,他的崛起是必然的 我们这群老程序员们学习新的技能也是必然的 不接受新技能将被这大群体无情的淘汰 So 我欣然接受这门看似不成熟的语言 下面我们说说...Swift中比较常见的控件UICollectionView 首先我们设置一个全局的UICollectionView和一个数据源 var colltionView : UICollectionView...,UICollectionViewDelegateFlowLayout 接下来我们要做的是override func viewDidLoad()方法中初始化一些必要的对象 override func...UIEdgeInsetsMake(5, 10, 5, 10) } 然后我们来获取数据,这里的话我用的是Alamofire进行的网络请求,URL不方便透露 //获取数据 func getData(){...更多经验请点击 原文在:http://www.allluckly.cn/ 最终效果图如下 Swift_CollTionView.gif 推荐一款学习iOS开发的app_____|___
其实所谓的nil就是Optional.None, 非nil就是Optional.Some, 然后会通过Some(T)包装(wrap)原始值,这也是为什么在使用Optional的时候要拆包(从enum里取出来原始值...相当于下面这种写法的语法糖 var strValue: Optional 上面这个Optional的声明,意思不是”我声明了一个Optional的String值”, 而是”我声明了一个Optional...表示“我确定这里的的strValue一定是非nil的,尽情调用吧” ,比如这种情况: if strValue { let hashValue = strValue!....因为是在viewDidLoad中初始化,所以不能直接声明为普通值:var myLabel : UILabel,因为非Optional的变量必须在声明时或者构造器中进行初始化,但我们是想在viewDidLoad...个人认为苹果是很认真的推出Swift的,从Swift的各种细微的设计也能看的出来。 另外这两个小符号就花费了我不少的时间来理解,可能依然会有错误和不妥之处,欢迎大家指正,本文旨在抛砖引玉。
随后,新建一个 Swift UI File,命名为 ContentView.swift。文件会自动生成一个 ContentView 的 Swift UI View。...接下来需要把 Swift UI View 用在 UIKit 中,需要用到 Swift UI 中的 UIHostingController 。这是可以把 Swift UI 包装成 UIView。...点击中央的 Button 之后将会 Push 到一个由 Swift UI 构建的 View。...将 ViewController 中 viewDidLoad 中代码替换成 swift 1super.viewDidLoad() 2let hostVc = UIHostingController(rootView...make.right.equalTo(view) 12 make.width.equalTo(view) 13 make.height.equalTo(view) 14}) COPY 然后我又发现了点好玩的东西
在加载 XIB 视图的时候每个人都会有自己的封装,今天我从最原始加载方式开始,分享一下我的便捷加载方式是怎么写出来的。...加载通过 XIB 自定义 View 的加载我们一般会有如下方法 XIBView: ZYXIBTestView.xib 在需要使用的 VC: override func viewDidLoad() {...ZYXIBTestView } 或者在XIB对应的view: ZYXIBTestView.swift 中 class func initByNib() -> ZYXIBTestView {...() } 后面我参考我原来写的一个UITableViewCell 的扩展: extension UITableView { /// 注册 xib cell func register...() } 同时也支持了OC, 毕竟开始的泛型方法OC是无法调用的: - (void)viewDidLoad { [super viewDidLoad]; UIView *view = [
领取专属 10元无门槛券
手把手带您无忧上云