日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Swift 3.0 beta 6权限访问修改

發布時間:2025/4/5 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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权限访问修改的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。