关于swift3.0

cocoaPods 引入三方后控制台有警告

感谢http://www.99css.com/1346/, 虽然人家遇到问题跟我不太一样, 但是解决步骤是一样的

当使用cocoaPods update之后, 在podFile里面, 先把

platform :ios, '8.0'

的注释解开,

然后会看到控制台说

The OneOneFourSwiftTests [Release] target overrides the ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES build setting defined in Pods/Target Support Files/Pods-OneOneFourSwiftTests/Pods-OneOneFourSwiftTests.release.xcconfig'. This can lead to problems with the CocoaPods installation - Use the$(inherited)` flag, or
- Remove the build settings from the target.

解决办法: 点击项目文件 project.xcodeproj,右键显示包内容,用文本编辑器打开project.pbxproj,全局搜索ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES的地方,删除,然后pod install, 世界清静。

swift平台的著名三方库

http://www.cnblogs.com/chuange-Strongload/p/5893736.html
http://www.cocoachina.com/bbs/read.php?tid-1712405.html

关于图片浏览, 暂时觉得这个还行
https://github.com/CharlinFeng/PhotoBrowser

关于多图选择, 暂时觉得这个还行
https://github.com/mikaoj/BSImagePicker

如果需要用到桥接文件

1、选中项目,右键,点击Add Files to xxxx

2、找到SDWebImage.xcodeproj,并加入项目中

3、在Build Phases中的Link Binary With Libraries选项卡中,加入ImageIO.framework、libSDWebImage.a

4、在Build Settings中的Linking选项卡中找到Other Linker Flags,双击右边区域,在弹出的框中点击+按钮,输入-ObjC

5、建立项目桥文件,输入引用代码#import <SDWebImage/UIImageView+WebCache.h>
关于桥文件的配置,小伙伴们可以百度一下,不过有个技巧,自己建立个.h和.m文件
然后复制到Swift项目中,系统会提示,是否自动建立桥文件,点击确定后,XCode会自动帮助我们建立桥文件,而且配置方面也不会出错~~~
最后,调用下SDWebImage中扩展的方法,运行,成功,Over

关于一些语法

if后面不用加圆括号

判断字符串是否相同直接用==即可

//OC: [self class]
//Swift 本类类名.self

注意一下设置navigationItem怎么写

 self.navigationItem.backBarButtonItem = UIBarButtonItem.init(image: UIImage.init(named: "navi_back"), style: UIBarButtonItemStyle.plain, target: self, action: #selector(back(btn:)))

方法实现的不太确定, 暂时不写

创建pch文件

还想要习惯性创建OC时代的pch文件? 这玩意没用啦!

但是, 新建Swift File 文件, Foundation改为UIKit, 一样可以, 感谢//www.greatytc.com/p/5ab77b7d6b4c, 图也是借用他家的

创建pch.png

@discardableResult 的使用

在 Swift 3 编译器下,如果一个 func 返回了一个对象,而你没有使用它时,会有一个 WARNING。

这里有两种方法可以解决这个 WARNING。

第一种:在 func 定义的前面,加上 @discardableResult 的修饰符,代表可以不使用返回值,这样编译器就不会有警告了。在我们自己定义的 func 上基本上都可以这么做。

但是还会有一种情况,用了第三方库或者系统库返回的对象怎么办?那只能用第二种办法:

_ = navigationController?.popViewController(animated: true)

感谢http://www.tuicool.com/articles/eaqiUfY

关于在调试模式打印, 生产环境不打印

 func PrintLog<N>(message:N,fileName:String = #file,methodName:String = #function,lineNumber:Int = #line){
             #if DebugType
          print("\(fileName as NSString)\n方法:\(methodName)\n行号:\(lineNumber)\n打印信息\(message)");
            #endif
   }

感谢http://blog.csdn.net/june_email/article/details/52369377

适配不同系统版本

//系统版本适配
    if #available(iOS 9.0, *) {
    } else {
        // Fallback on earlier versions
    }

dealloc没有啦, 现在是deinit {}

关于注释

感谢//www.greatytc.com/p/307427e6d990
普通注释当然还是command + /
其他的效果也能出来, 但是打的时候没有代码提示稍显遗憾
oc时代的pragma如今是

//MARK:- xxx

有横线是有分割线, 若要加横线, xxx要在横线后空一格

一些功能可能需要以后添加或者补全

//TODO: XXXX

会有一些小的bug,不紧急也不影响程序的运行,可以暂时不予处理,稍后需要修改

//FIXME: XXXX

怎么打出oc时代那种warning呢, 需要以下几步
感谢http://www.th7.cn/Program/IOS/201603/773307.shtml
http://stackoverflow.com/questions/24183812/swift-warning-equivalent 的第一个回答

warning第一步.png

warning第二步.png

warning第三步.png

但是我们只希望他在调试环境下警告
第三幅图原本是

TAGS="TODO:|FIXME:"
echo "searching ${SRCROOT} for ${TAGS}"
find "${SRCROOT}" /( -name ".swift" /) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS)./$" | perl -p -e "s/($TAGS)/ warning: /$1/"

改为

if [ "${CONFIGURATION}" = "Debug" ]; then
TAGS="TODO:|FIXME:"
echo "searching ${SRCROOT} for ${TAGS}"
find "${SRCROOT}" ( -name ".swift" ) -print0 | xargs -0 egrep --with-filename --line-number --only-matching "($TAGS).$" | perl -p -e "s/($TAGS)/ warning: $1/"
fi

用的时候这么用, TODO也可以

//#warning
//#FIXME: xxxxxx

关于图片渲染方式的语法

这是swift3版的

UIImage.init(named: normalImage)?.withRenderingMode(.alwaysOriginal)

数组字典增删改查

还没做到这, 先记录一下
http://blog.csdn.net/jiang314/article/details/51488302

关于for

这个是重点, swift已经彻底去C化, 据说语法表达与phython很接近, 他的forin和OC差不多, for后面写个变量接收, in后面是被遍历的集合
感谢http://www.cnblogs.com/lingluo/p/6028737.html
1:如何遍历一个字典或者数组?

数组

let list = [1, 3, 5, 7, "string test"] as [Any]
for i in list{
      print(i)
}

字典

let dict = ["name":"key name", "name1":"key1 name", "name2":"key2 name"]
for key in dict.keys {
    print("key==\(key)")
}
    
for value in dict.values{
     print("value==\(value)")
}

2.如果只是简单的计数器

for i in 1..<10{
    print(i)
    // 打印结果为1-9
}
for i in 1...10{
    print(i)
    //打印结果为1-10
}

3.如果需要递减循环遍历

for i in (0...10).reversed(){
       print(i)    // 打印结果为10-0
 }
  1. 遍历元素并获取下标

     for (index, i) in (1...10).enumerated(){
            print(index)// 遍历索引
             print(i) // 遍历元素
      }
    
  2. 遍历的同时过滤

    for i in (1...10).filter({ i in i % 2 == 0}) {
             print(i)
             //输出结果为1-10之间的偶数
    }
    ///////////补充一个漂亮的语法糖///////////
     for i in (1...10).filter({ $0 % 2 == 0}) {//swift闭包可以省略参数且用$0匿名,第二个参数则用$1,以此类推
        print(i)
        //输出结果为1-10之间的偶数
     }
    

关于实例方法和类方法

这是实例方法
func compareServerVersion(serverVersion:String, localVersion:String) -> Bool{}

这是类方法
class func compareServerVersion(serverVersion:String, localVersion:String) -> Bool{}

对, 就是方法前面有没有class修饰罢了

关于使用SwiftyJSON层层解析获取到的值

用let直接接收后, 如果要使用的话, 如果知道这个值是字符串, 直接该值.string 即可使用

使用private 隐藏属性

如果想要隐藏getter, setter

private let page: UIPageControl? = nil

如果只是隐藏setter

private(set) var diameter: Double = 0

关于重写setter 和 懒加载

重写setter, 如果这么写就不需声明属性了

//    var 属性名: 属性类名? {
//        //替代OC中重写setter方法,didSet没有代码提示
//        //区别:不用考虑 _成员变量 = 值!
//        //OC中如果是copy属性,应该 _成员变量 = 值 copy

//这个willSet是在赋值之前
//    willSet(newTotalSteps) { 
//    println("About to set totalSteps to \(newTotalSteps)") 
//    } 

//        didSet {
//            //此时属性已经有值,可以设置内容
//            
//        }
//    }

懒加载, 也可以private lazy var来限定作用域
小心循环引用, 所以小心使用self.

//1. 懒加载简单写法
lazy var label: UILabel = UILabel();

//2.分析 NSArray 是一个闭包的返回值,而这是一个没有参数的闭包
lazy var dataArray: NSArray = { [] }()

//3.也可以写成这样
lazy var dataArray2:NSArray = {
    return NSArray()
}()

//4.完整写法
lazy var loginButton : UIButton = {
    let btn = UIButton(type: .custom)
    btn.frame = CGRect(x: 50, y: 20, width: 10, height: 40)
    btn.backgroundColor = UIColor.white
    btn.setTitleColor(UIColor.lightGray, for: .normal)
    btn.setTitle("登 录", for: .normal)
    
    return btn
}()

桥接文件

  1. 创建一个oc的类, 会提示是否创建桥接文件, 确认;

  2. 点击这个桥接文件, 把左侧文件名拉进来, 整个剪切

  3. build settings 搜索bridging, 然后粘进去, 然后在桥接文件里面 #import "SVProgressHUD.h", 如果失败, 把桥接文件删了多来几遍, 就是这么神奇

关于截取String类型的字符串

太酷炫的还没研究, 暂时会这种
感谢 http://blog.csdn.net/longshihua/article/details/53883949

s.startIndex 从第一个字符开始
s.endIndex 从最后一个字符开始

 let s="1234567890"
    
    let index = s.index(s.startIndex, offsetBy: 5)
    let index2 = s.index(s.endIndex, offsetBy: -6);

    let length = s.characters.count
    let index3 = s.index(s.endIndex, offsetBy: -(length - 1))

    let s1:String = s.substring(from:index)//from:取index划好的范围的数
    let s2:String=s.substring(to:index2)//to:舍弃index划好的范围的数
    let s3 = s.substring(from: index3)

    print(s1)//67890
    print(s2)//1234
    print(s3)//234567890

写一点语法糖

有些不知道算不算语法糖

不在闭包中的, 无论调用方法还是属性, 而且这些方法属性无论是自己声明还是系统自带, 皆可省去self., 但不可以再像oc一样用下划线+属性名

如果等号左边已知变量的数据类型, 则等号右边的属性或方法调用可省去类名, 直接.xxx即可

以下这句代码可示例上面两种情况

contentView.backgroundColor = .white
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容

  • 日子,太无聊了。浪费的不是生命,是青春。自己过好就好了。别担心别人的眼光。一定要对自己有自信,不管遇到什么。
    这份土壤只是用来吐槽阅读 167评论 0 0
  • 金庸先生的名著《笑傲江湖》之所以成功,在很大程度上取决于塑造了令狐冲这一十分精彩的人物。相对于郭靖的“为国为民、鞠...
    無為和尚阅读 1,177评论 4 3
  • 紫砂壶的泥料,一直以来都是众多新人玩家比较关注的话题。更是在最近朋友圈疯传几年前央视曝光“化工紫砂壶视频”的情况下...
    砂壶之美阅读 1,150评论 0 2