美文网首页
Swift,让Code更简洁

Swift,让Code更简洁

作者: 952625a28d0d | 来源:发表于2016-07-15 11:40 被阅读70次
  • Block语法
public typealias COMPLETE_BLOCK = (AnyObject!, Int32, AnyObject!) -> Void
public typealias PROGRESS_BLOCK = (Int64, Int64) -> Void```

- 使用Block

public func rpcRequestWithURL(url: String!, operationType: String!, requestData: String!, block: COMPLETE_BLOCK!)```

  • 使用guard let代替 if else 处理异常情况
guard let videoURLStr = messageModel.param["previewUrl"] as? String,
            title = messageModel.param["strTitle"] as? String,
            desc = messageModel.param["strDesc"] as? String else {return}```

- 用lazy关键字处理不常用的View等控件,比如弹窗,下拉菜单等等

lazy var previewView:XYTemplatePreviewView = {
let view = NSBundle.mainBundle().loadNibNamed("XYTemplatePreviewView", owner: self, options: nil).last as! XYTemplatePreviewView
return view
}()```

  • 更灵活的enum(枚举)以及Swith case语句
enum XYBridgedMethod : String {
    case GetLocalThemeList = "getLocalThemeList"
    case DownloadTheme = "downloadTheme"
    case UseTheme = "useTheme"
    case GetLanguage = "getLanguage"
    case ShowThemeVideo = "showThemeVideo"
}

enum XYThemeShopUseThemeType {
    case ApplyTheme
    case CreateNewProject
}```

- 更方便的扩展extension

extension String {
func reverseString() -> String {
// do something if necessary
}
} ```

extension UIColor {
    class func clipboardTopBarBGColor() -> UIColor{
        switch colorTheme{
        case .Default:
            return UIColor.color(hex: 0x424242)
        }
    }
}```

- get set方法重写更为简单

var clipSize:CGSize{
get{
let flowLayout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout
return flowLayout.itemSize
}
set{
}
}```

  • 使用willSet与didSet来监听值得属性改变
 // 普通属性
    var nickName:String! = ""
    var lastName:String! = ""
    var firstName:String! = ""
    
    // 计算属性
    var fullName:String!{
        get{
            return nickName + "" + lastName + firstName
        }
    }
    
    
    //带属性监视器的普通属性
    var age:Int = 0
        {
        //我们需要在age属性变化前做点什么
        willSet
        {
            print("Will set an new value \(newValue) to age")
        }
        //我们需要在age属性发生变化后,更新一下nickName这个属性
        didSet
        {
            print("age filed changed form \(oldValue) to \(age)")
            if age<10
            {
                nickName = "Little"
            }else
            {
                nickName = "Big"
            }
        }
    }```

- 一句话搞定单例

import Foundation
class SingleOne {
//单例
static let shareSingleOne = SingleOne()
}```

  • .#if endif使用
//使用#if DEBUG 需要在Other Swift Flags中,DEBUG下添加-D DEBUG
func printLog<T>(message: T, file: String = #file, method: String = #function, line: Int = #line){
#if DEBUG
    print(logString(message, file: file, method: method, line: line), terminator: "\n")
#endif
}```

- Block弱引用 **unowned**关键字

override func addMoreMethod() {
addMethod(methodName: .GetLocalThemeList) {[unowned self] (messageModel) in
let callbackModel = self.getCallbackModel(messageModel)
let localThemeListDict = self.getLocalThemeList()
let themeListJSON = XYH5ContainerTool.JSONStringWithDic(localThemeListDict)
callbackModel.param = ["themes":themeListJSON]
self.sendMessageToWebWithH5MessageModel(callbackModel)
}
}```

  • GCD的简易封装

  • 子线程或延迟执行

func async(after second:Double? = nil, block:()->Void){
    if let sec = second {
        dispatch_after(dispatchTimeAfterNow(sec), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block)
    }else{
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block)
    }
}```

- 计算时间

func dispatchTime(second:Double)->Int64{
return (Int64)(second * Double(NSEC_PER_SEC))
}

func dispatchTimeAfterNow(second:Double)->dispatch_time_t{
return dispatch_time(DISPATCH_TIME_NOW, dispatchTime(second))
}```

  • 主线程或延迟执行
func asyncMain(after second:Double? = nil, block:()->Void){
    if let sec = second {
        dispatch_after(dispatchTimeAfterNow(sec), dispatch_get_main_queue(), block)
    }else{
        dispatch_async(dispatch_get_main_queue(), block)
    }
}```

- 子线程或延时执行

func async(after second:Double? = nil, block:()->Void){
if let sec = second {
dispatch_after(dispatchTimeAfterNow(sec), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block)
}else{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block)
}
}```

  • 打印log字符串
private func logString<T>(message:T, file:String, method:String, line:Int)->String{
    return "\(printLogDateFormatter.stringFromDate(NSDate())) \((file as NSString).lastPathComponent)[\(line)], \(method): \(message)"
}```

相关文章

  • Swift,让Code更简洁

    Block语法 public func rpcRequestWithURL(url: String!, opera...

  • 从理论到实战,如何快速掌握 Swift 开发?

      Swift 语言是苹果全力推广的语言,相对于 Objective-C,Swift语法更简洁,类型更安全。另外,...

  • 定义 swift 全局常量

    定义swift全局常量.让我们开发更快捷,代码更简洁. 第一: 先创建file.swift 文件,file....

  • swift第一讲

    swift系列课程 编译流程 Swift code --> Swift AST -->Raw Swift IL ...

  • Code Weather 一个让你进入全新领域的app,他就是“code weather”。 简洁排版,一目了然;...

  • Swift Tips - Defer关键字

    前面有说到,在 swift 2.0 引入了 guard 关键字,可以让代码编写更流畅。它的优雅简洁而功能强大确实给...

  • Swift - 基本语法(一)

    写在前面 1.Swift保持了OC的参数命名系统,但是在语法上更简洁,可读性更强 代码更容易被维护2.Swift安...

  • Swift字符处理

    比起很多传统语言,Swift在字符处理方面显得更加简洁易用。本文会总结一些Swift在字符处理上的常用方法,持续更...

  • swift中高阶函数之filter、map、flatMap、re

    filter、map、flatMap、reduce都是swift中的高阶函数,对集合的处理代码更简洁,效率更高效 ...

  • Swift&OC

    Swift更简洁、更安全、更快、开源、跨平台 1.引入命名空间的概念 1.1.不用再import其他文件1.2.取...

网友评论

      本文标题:Swift,让Code更简洁

      本文链接:https://www.haomeiwen.com/subject/wpryjttx.html