1、Swift 3.0 使用Cocopods 导入第三方报错

  之前一直用Object-C 编写代码  用Cocopods导入第三方没出过什么问题(PS:2017最新cocoaPods安装教程

  今天用Swift写项目 导入第三方的时候出现这个错误:

  [!] Pods written in Swift can only be integrated as frameworks; add `use_frameworks!` to your Podfile or target to opt into using it. The swift Pods being used are: ExSwift

后来查证,需要在Podfile文件中加入use_frameworks!

之前是这样写的:

platform :ios, ’10.3’
target ‘MySwiftDemo’ do
pod 'ExSwift', '~> 0.1.9'
end

加上 use_frameworks! 问题解决

platform :ios, ’10.3’
target ‘MySwiftDemo’ do
pod 'ExSwift', '~> 0.1.9'
use_frameworks!
end


2、重写UINavigationController 返回按钮 backBarButtonItem&leftBarButtonItem

  项目中很多地方要重写返回按钮样式或者要在返回事件中进行一些操作,这就要重写backBarButtonItem或者leftBarButtonItem两个属性。

  ①、对当前页面而言,leftBarButtonItem的优先级最高,如果对当前页面的self.navigationItem.leftBarButtonItem赋新值,则当前页面每次被push进来左上角显示的就是这个新的UIBarButtonItem。

  ②、如果当前页面的self.navigationItem.leftBarButtonItem没有赋新值,但是push当前页面进来的上个页面的self.navigationItem.backBarButtonItem 重新赋值了,则当前页面的左上角显示上个页面的self.navigationItem.backBarButtonItem。

  ③、如果当前页面的leftBarButtonItem和上个页面的backBarButtonItem都没有赋新值,则当前页面的左上角显示默认的返回按钮,一个向左的箭头和上个页面导航栏的title。

  注意:针对第②种情况,给 self.navigationItem.backBarButtonItem   赋新值的时候,创建 UIBarButtonItem 时,使用:

public convenience init(barButtonSystemItem systemItem: UIBarButtonSystemItem, target: Any?, action: Selector?)

public convenience init(customView: UIView)

  这两种方法都是无效的(亲测无效,知道原因的小伙伴可以告知我),下个页面的左上角的返回按钮仍会按照第三种情况的样式显示。

  使用:

public convenience init(image: UIImage?, style: UIBarButtonItemStyle, target: Any?, action: Selector?)

  创建时,会同时显示两个图片,左边的是系统默认向左的箭头(默认蓝色),右边的是你添加的图片

  使用:

public convenience init(title: String?, style: UIBarButtonItemStyle, target: Any?, action: Selector?)

  创建时,依然会显示系统默认的向左的箭头,右边的文字显示的是创建时的title。(如果title为nil 则只显示系统默认的箭头)

   补充:leftBarButtonItem的优先级高于backBarButtonItem,如果当前页面的leftBarButtonItem被赋新值,push当前页面的backBarButtonItem也赋新值,则当前页面左上角返回按钮显示leftBarButtonItem!!


3、在stryboard修改navigationBar的属性(如:barTintColor、titleColor等)会出现警告!!

  警告内容如下:

  Frame for "Navigation Bar" will be different at run time.

  Width will be 320 at run time but is 375 in the canvas.

意思是视图在运行时宽度会改变(Width由375变为320),我试图点击自动布局进行修改,却发现修改不了,后来在stackoverflow找到答案,需要修改Navigation Controller的Simulated Size为Freeform即可。


4、使用cocopods时,pod install和pod update什么时候用

  许多人开始使用CocodPods的时候认为pod install只是你第一次用CocoaPods建立工程的时候使用,而之后都是使用pod update,但实际上并不是那会事。

简单来说,就是:

  ①、使用pod install来安装新的库,即使你的工程里面已经有了Podfile,并且已经执行过pod install命令了;所以即使你是添加或移除库,都应该使用pod install。

  ②、使用pod update [PODNAME] 只有在你需要更新库到更新的版本时候用。


5、Swift中创建Swift File文件编写全局变量无效

  OC中常用的变量我们都是写在pch文件中,可是Swift中搭建ProjectName-Bridging-Header.h(OC和Swift混编)文件引入pch文件并没有效果,所以我们需要另辟蹊径。

  解决方法:

  Command+N创建Swift File文件,将常用的全局变量写在这个Swift文件中,Swift中不需要对.h文件的引入,如果项目需要混编,头文件的引入写在Bridging-Header.h中。这时候问题来了,我穿件好Swift File文件,写入全局变量却不能在其他文件中调用,很是恼火!

  最后得到解决,需要将创建的Swift File文件与调用全局变量的文件放在同一个根文件下!


6、关键字static和class的区别

  在方法的func关键字之前加上关键字static或者class都可以用于指定类方法. 不同的是用class关键字指定的类方法可以被子类重写, 如下:

override class func work() {
print("Teacher: University Teacher")
}

但是用static关键字指定的类方法是不能被子类重写的

根据报错信息: Class method overrides a 'final' class method. 我们可以知道被static指定的类方法包含final关键字的特性--防止被重写.

类方法和实例方法可以重名,但不建议写相同的方法名.


7、Swift_修饰符(final、override、discardableResult、mutating、lazy、inout.....)

 ①、final 防止重写

//防止重写
class finalClass{
final var applePen = 1
final func test(){ } final class func test2(){ }
} class finalSub: finalClass {
//无法重写基类 定义了 final 的属性和函数
} //加到class前,无法被继承
final class unDo{ }

②、@discardableResult

@discardableResult //取消如果不使用返回值的警告
class func unUseReuslt(d x:Int) -> Bool { return true
}

③、mutating

实例化的时候,实参是不可改变,如果确实需要改的话加 mutating

struct Point {
var x = 0, y = 0 mutating func moveXBy(x:Int,yBy y:Int) {
self.x += x
self.y += y
}
} var p = Point(x: 5, y: 5) p.moveXBy(3, yBy: 3)

另外,在值类型的实例方法中,也可以直接修改self属性值。

enum TriStateSwitch {
case Off, Low, High
mutating func next() {
switch self {
case Off:
self = Low
case Low:
self = High
case High:
self = Off
}
}
}
var ovenLight = TriStateSwitch.Low
ovenLight.next()
// ovenLight is now equal to .High
ovenLight.next()
// ovenLight is now equal to .Off”

④、convenience便利构造器

// 指定构造器 和 便利构造器
class Food {
var name: String
init(name: String) {
self.name = name
}
//便利构造器
convenience init() {
self.init(name: "[Unnamed]")
} }

⑤、lazy懒加载

Object-C的懒加载是当使用时才去开辟空间,set get方法

Swift 懒加载相当于静态空间,只运行一次....只打印一次 a = 1

lazy var num: Int = {
print("只打印一次!")
return 1
}() print(num)
num += num
print(num) // 只打印一次!
// 1
// 2

⑥、Swift关键字inout - 让值类型以引用方式传递

⑦、defer关键词,让代码块延期执行


Swift 编程杂谈的更多相关文章

  1. 窥探Swift编程之别样的HelloWorld

    从今天就开始陆陆续续的发布一些有关Swift语言的东西,虽然目前在公司项目开发中Objective-C还是iOS开发的主力军,但是在不久的将来Swift将会成为iOS开发中的新生宠儿.所以在在Xcod ...

  2. Swift 编程风格指南(raywenderlich.com 版本号)

    官方 raywenderlich.com Swift 编程风格指南 本文版权归 raywenderlich.com .The Official raywenderlich.com Swift Styl ...

  3. Swift 编程思想 阅读笔记

    Swift 编程思想,第一部分:拯救小马html, body {overflow-x: initial !important;}.CodeMirror { height: auto; } .CodeM ...

  4. Swift编程权威指南第2版 读后收获

    自从参加工作一直在用OC做iOS开发.在2015年的时候苹果刚推出swift1.0不久,当时毕竟是新推出的语言,大家也都很有激情的学习.不过在学完后发现很难在实际项目中使用,再加上当时公司项目都是基于 ...

  5. Swift 编程思想 Part 4:map all the things!

    Swift 编程思想 Part 4:map all the things! 2015-10-22  837 文章目录 1. 数组 vs. 可选类型 2. 作用在可选类型上的 map() 3. 回到我们 ...

  6. 编程杂谈——std::vector与List<T>的性能比较

    昨天在比较完C++中std::vector的两个方法的性能差异并留下记录后--编程杂谈--使用emplace_back取代push_back,今日尝试在C#中测试对应功能的性能. C#中对应std:: ...

  7. 窥探Swift编程之强大的Switch

    之前初识Swift中的Switch语句时,真的是让人眼前一亮,Swift中Switch语句有好多特有而且特好用的功能.说到Switch, 只要是写过程序的小伙伴对Switch并不陌生.其在程序中的出镜 ...

  8. 【Swift学习】Swift编程之旅---类和结构体(十三)

    与其他编程语言所不同的是,Swift 并不要求你为自定义类和结构去创建独立的接口和实现文件.你所要做的是在一个单一文件中定义一个类或者结构体,系统将会自动生成面向其它代码的外部接口. 注意:通常一个类 ...

  9. raywenderlich.com的Swift编程风格指南

    翻译自:https://github.com/raywenderlich/swift-style-guide 这个风格指南可能和你从其它地方看到的不同,我们的焦点主要集中在互联网和文章上的可读性.创建 ...

随机推荐

  1. expect 批量自动部署ssh 免密登陆 之 二

    #!/usr/bin/expect -f ########################################## hutu #Push the id.pas.pub public key ...

  2. 算法——八皇后问题(eight queen puzzle)之回溯法求解

    八皇后谜题是经典的一个问题,其解法一共有种! 其定义: 首先定义一个8*8的棋盘 我们有八个皇后在手里,目的是把八个都放在棋盘中 位于皇后的水平和垂直方向的棋格不能有其他皇后 位于皇后的斜对角线上的棋 ...

  3. Oracle 数据库监听无法连接上、监听HANG住、监听无响应、TNS-12560

    环境: Windows server 2003 Oracle 11.2.0.1 问题: 一套老数据库在运行了很久后,突然就连接不上了,提示监听异常. 处理: 1.CMD命令行检查监听状态:无监听 2. ...

  4. 部署自建CA颁发证书实现https加密

    理论忽略:百度上很多 需求:自建证书并实现域名的https加密 部署: 在linux机器上执行以下命令生成私钥 mkdir -p /opt/ssl-cert cd  /opt/ssl-cert 1.# ...

  5. 高可用Redis(十三):Redis缓存的使用和设计

    1.缓存的受益和成本 1.1 受益 1.可以加速读写:Redis是基于内存的数据源,通过缓存加速数据读取速度 2.降低后端负载:后端服务器通过前端缓存降低负载,业务端使用Redis降低后端数据源的负载 ...

  6. Python base64编码,转图片

    我在做火车票抢票器的时候遇到一个问题,就是验证码提取的:一般验证码都是一些http请求的url,但是火车票网站遇到了我没有见过的以data:image/jpg;base64开头的字符串.现在我们就用P ...

  7. 爬虫-request和BeautifulSoup模块

    requests简介 Python标准库中提供了:urllib.urllib2.httplib等模块以供Http请求,但是,它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工 ...

  8. Nginx 自定义添加Response Headers 修改server

    之前说过如何隐藏Response Headers中 X-Powered-By 修改php.ini expose_php = Off service php-fpm reload 隐藏Nginx版本号  ...

  9. Definition of matrix norms

    In my previous post, I introduced various definitions of matrix norms in \(\mathbb{R}^{n \times n}\) ...

  10. C&C++ Calling Convention

    tkorays(tkorays@hotmail.com) 调用约定(Calling Convention) 是计算机编程中一个比较底层的设计,它主要涉及: 函数参数通过寄存器传递还是栈? 函数参数从左 ...