Swift 3.0 beta 6权限访问修改
原文地址: https://kemchenj.github.io/20...
title: Swift 3.0 beta 6權限訪問修改
date: 2016-08-17 17:14
前兩天 swift 3.0 更新了 beta 6, 權限訪問的幾個關鍵字有了一些改變, 這篇文章給大家簡單介紹一下(真得很簡單...)
還有一些小改變, 其中幾個讓人覺得很詭異:
很多 Core xx 的庫把 swift原生的 Array 改成了 CFArray, 很多時候需要用 as 去轉換(swift runtime 目前唯一一個比較顯眼的功能...)
聲明閉包的時候不能帶顯式 argument label, 例如typealias completion = (data: Data, error: Error?) -> Void就會報錯, 必須加上_或者刪掉參數標簽
還有就是現在閉包作為參數傳入的時候默認都是@nonescaping的, 如果閉包不是在當前作用域內執行而是還要繼續傳遞到別的函數里的話, 那就必須加上@escaping
引入了 Objective-C 的 id, 在 Swift 叫做Any, 之前很多接口都從 AnyObject 改成了 Any, 而 Any 是沒有 subscript 方法的, 看也就是說不能用鍵值對取值, 很多原本要通過鍵值對取值的寫法都得先把類型強轉成字典或者是 Anyobject?
<!--more-->
新增 open 關鍵字, public 變得沒那么 public
beta 6 新增加了 open 關鍵字, 可以理解為之前的 public
在同一個包 module 內, public 跟 open 的含義是一樣的, 但是在 module 外, open 聲明的成員變量和函數是可以被 override 的, 而 public 只是把接口公開出去, 而不能被 override
open 大概有這么幾個規則:
一個類可以被聲明為 open.
一個類不能同時聲明 open 和 final
一個 open 的類的父類必須也是 open 的, 父類的父類也必須會被按照這條規則遞歸約束
這個主要是區分開 Module 外可訪問和 Module 外可被修改這兩個概念, 具體可以看[[SE-0117]Allow distinguishing between public access and public overridability](https://github.com/apple/swif...提案
//--------Module Foo------- class Foo {public var one: Int {return 1}open var two: Int {return 2}}class A: Foo {// 正常運行override var one: Int {return 2}// 正常運行override var two: Int {return 1} } //------End of Module------//--------Module Bar------- class B: Foo {// 報錯override var one: Int {return 2}// 正常運行override var two: Int {return 1} } //------End of Module------另外還有一點, 就是 Objective-C 的庫導入的話默認都為 open, 之前是 public
新增 moduleprivate和fileprivate, 而 private 變得更加 private
這一次還新增了一個 moduleprivate, 從字面意義上來說跟 internal 很像, 我現在還不太清楚到底跟 internal 有什么具體的區別, 在 Swift Evolution 和 Xcode 的 Release Note 里都沒有找到具體的解釋
為了權限安全, 我們很多時候都會在變量和實現的函數前面加上 private, 現在需要改成 fileprivate, fileprivate 跟之前的 private 基本上一樣
而 private 現在就更加 private, 只能在當前作用域內發生作用, 同一文件里 extension 里也是不能訪問的到 private 修飾的成員變量
//---- 文件 Foo.swift ---- class {fileprivate var one = 1private func two() {...} }extension Foo {func printOne() {print(one) // 正常運行}func printTwo() {print(two) // 報錯} } //--------- EOF ---------//-- 文件 Foo+Bar.swift -- extension Foo {// 都報錯func printOneAgain() {print(one)}func printTwoAgain() {print(two)} } //--------- EOF ---------參考鏈接
What is the 'open' keyword in Swift?
[[SE-0117]Allow distinguishing between public access and public overridability](https://github.com/apple/swif...
#22 Swift 3 Access Control (Xcode 8 Beta 6)
初級 iOS 開發, 廣州地區求職 ing
簡歷: https://kemchenj.github.io/re...
聯系方式: chenkem95@outlook.com
總結
以上是生活随笔為你收集整理的Swift 3.0 beta 6权限访问修改的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线程使用二——线程池
- 下一篇: RF设计天线 PI型匹配layout注意