美文网首页
swift知识点

swift知识点

作者: sweetpf | 来源:发表于2018-04-27 14:58 被阅读21次

简单值

  • 常量 let
  • 变量 var
  • 显式类型
  • 强制转换
  • (value) () 来把一个浮点计算包含进字符串
  • [] 创建数组或者字典 用[]来表示空数组,用[:]来表示空字典

关键字

现在的访问权限则依次为:open,public,internal,fileprivate,private。

  • open

open 修饰的 class 在 Module 内部和外部都可以被访问和继承
open 修饰的 func 在 Module 内部和外部都可以被访问和重载(override)
  • public

public 修饰的 class 在 Module 内部可以访问和继承,在外部只能访问
public 修饰的 func 在 Module 内部可以被访问和重载(override),在外部只能访问
  • Final

final 修饰的 class 任何地方都不能不能被继承
final 修饰的 func 任何地方都不能被 Override 
  • internal

  • fileprivate

  • private

控制流

  • 逻辑判断 if switch
  • 循环 for-in for while repeat-while
  • if let
  • ? 与 ?? 可选类型( Optional) 操作的语法糖
    1.声明Optional值变量
    2.用在对Optional值操作中,用来判断是否能响应后面的操作
    3.使用 as? 向下转型(Downcast)
  • ..< 序列区间 0..<4 不包含最大值的区间
  • ... 包含最大值和最小值的区间

  • 1.强制对Optional值进行拆包(unwrap)
    2.声明隐式拆包变量,一般用于类中的属性

语法

try、try、try?

try?会将错误转换为可选值,当调用try?+函数或方法语句时候,如果函数或方法抛出错误,程序不会发崩溃,而返回一个nil,如果没有抛出错误则返回可选值。

as、as!、as?

  • as 字面理解就是有保证的转换,从派生类转换为基类的向上转型
    例如: let num = 1 as CGFloat // 将1转成float
  • as! 字面理解就是有强项转换,即向下转型,子类(派生类)向父类转换,官方解释说这是一个不被保证的转换,可能会因为强转的失败而会导致崩溃。
  • as? 功能上面同as! ,区别在于,如果转换不成功的时候便会返回一个 nil 对象。成功的话返回可选类型值(optional),需要我们拆包使用。

?、??

  • ?: 声明Optional值变量
  • ??:运算符,例如 let c = a ?? b 表示若a为nil,将b赋值给c,否则将a赋值给c

枚举和结构体 enum

高阶函数

  • map: 可以对数组中的每一个元素做一次处理
    例如:
let stringArray = ["Objective-C", "Swift", "HTML", "CSS", "JavaScript"]
func stringCount(string: String) -> Int {
    return string.characters.count
}
stringArray.map(stringCount)

表示给数组stringArray中的每个元素执行stringCount方法,最后返回的是数组类型

  • flatMap: 功能与map一样,但是flatMap返回后的数组中不存在nil,同时它会把Optional解包

  • filer: 过滤,可以对数组中的元素按照某种规则进行一次过滤

  • reduce: 计算,可以对数组的元素进行计算

  • sort 使用sort方法和闭包对数组进行排序
    numbers.sorted(by:{$0 < $1})

  • enumerated 返回一个新的序列,包含了初始序列里的所有元素,以及与元素相对应的编号。

$0、$1

可以用0、1、2来表示调用闭包中参数,0指代第一个参数,1指代第二个参数,2指代第三个参数,以此类推。

in 闭包中的关键字,作为一个分隔符号,分开闭包参数和闭包体。当使用$0、$1等可以省略in

init deinit

  • init 创建一个初始化器
  • deinit 创建一个反初始化器

override 子类的方法重写父类的实现

func 实例方法 class func 类方法

单例

class SingletonClass: NSObject {

    static let shared = SingletonClass()
    
    // Make sure the class has only one instance
    // Should not init or copy outside
    private override init() {}
    
    override func copy() -> Any {
        return self // SingletonClass.shared
    }
    
    override func mutableCopy() -> Any {
        return self // SingletonClass.shared
    }
    
    // Optional
    func reset() {
        // Reset all properties to default value
    }
}

函数、实例方法、类方法

- 自定义函数,需要根据函数的参数申明前是否添加"_"来区别对待,
例如:
1、func calculateStatistics(_ scores: [Int]) -> (min: Int, max: Int, sum: Int) {     这样写就这样传参calculateStatistics([5, 3, 100, 3, 9])
2、 func calculateStatistics(scores: [Int]) -> (min: Int, max: Int, sum: Int) {   这样写就这样传参calculateStatistics(scores:[5, 3, 100, 3, 9])

- <实例>.<方法名>(参数值,参数名:参数值,参数名:参数值...) // 方法调用第一个参数不写参数名,后面的全部要写。特殊情况是尾闭包,往下看
- <类初始化>(参数名:参数值,参数名:参数值...) // 类初始化所有参数都需要加参数名

- 外部参数名(External Parameter Names)
有时候,调用函数时,给每个参数命名是非常有用的,因为这些参数名可以指出各个实参的用途是什么。如果你希望函数的使用者在调用函数时提供参数名字,那就需要给每个参数除了局部参数名外再定义一个外部参数名。外部参数名写在局部参数名之前,用空格分隔。例如:public mutating func remove(at index: Int) -> Array.Element里面的at 

- 简写外部参数名(Shorthand External Parameter Names)
如果你需要提供外部参数名,但是局部参数名已经定义好了,那么你不需要写两次参数名。相反,只写一次参数名,并用井号(#)作为前缀就可以了。这告诉 Swift 使用这个参数名作为局部和外部参数名。

闭包 -> block

  • 全局函数 是一个有名字但不会捕获任何值的闭包
  • 嵌套函数 是一个有名字并可以捕获其封闭函数域内值的闭包
  • 闭包表达式 是一个利用轻量级语法所写的可以捕获其上下文中变量或常量值的匿名闭包

Swift中的get & set 方法

mutating

为了能够在实例方法中修改属性值,可以在方法定义前添加关键字mutating

open,public,internal,fileprivate,private

  • private
    private访问级别所修饰的属性或者方法只能在当前类里访问。
  • fileprivate
    fileprivate访问级别所修饰的属性或者方法在当前的Swift源文件里可以访问。
  • internal(默认访问级别,internal修饰符可写可不写)
    internal访问级别所修饰的属性或方法在源代码所在的整个模块都可以访问。
    如果是框架或者库代码,则在整个框架内部都可以访问,框架由外部代码所引用时,则不可以访问。
    如果是App代码,也是在整个App代码,也是在整个App内部可以访问。
  • public 可以被任何人访问。但其他module中不可以被override和继承,而在module内可以被override和继承。
  • open 可以被任何人使用,包括override和继承。

swift 经典库

  • CryptoSwift Crypto 算法及相关功能类库,swift加密库, 支持md5,sha1,sha224,sha256...

  • Kingfisher 异步下载和缓存图片的库 类似于SDWebImage

  • PermissionScope 权限管理库 提供申请权限授权操作

  • Alamofire 网络库,类似AFNetWorking

  • SnapKit 类似masonry 对比Cartography

  • Spring 提供动画调试功能的强大动画的 API 库

  • ReactiveAnimation 知名ReactiveAnimation 的 Swift 版子项目

  • Toast-Swift 高可定制、易用的 Toast 通知组件

  • SwiftyJSON Swift 界 JSON 解析之王。

  • Firebase Analytics 由谷歌制作(好吧,收购),应该是 iOS 最好的免费分析解决方案。追踪 app 使用量、用户活跃度、以及事件;设置用户属性;创建自定义受众;还有更多。[Firebase Analytics | Firebase - Firebase Analytics 是一个免费 app 监测解决方案,洞察 app 用量和用户活跃度]。

  • AsyncDisplayKit

  • DZNEmptyDataSet
    户安装了你的 app 之后,就会看见一个空白的 UITableView。
    DZNEmptyDataSet 帮助你避免这个情况,它提供了 Empty Data Set Pattern 的默认实现。

  • Chameleon 作者是 Vicc Alexander
    Chameleon 是一个轻量、又强大的 iOS 颜色框架。它基于“软件应用程序应该轻松地实现功能,同时保持漂亮的界面”这个想法而创建。有了 Chameleon,你就不再需要捣鼓 RGB 值、浪费时间搞明白 app 里正确的颜色组合、以及为文本能否在 app 里不同的背景下可以被看见而烦恼。

  • SwiftyUserDefaults

  • FSCalendar
    日历库

  • ImageViewer
    图片预览

  • FileKit 文件管理

相关文章

网友评论

      本文标题:swift知识点

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