中的元类型,摩羯男最容易被哪种女生吃定

2019-09-11 作者:买车用车   |   浏览(162)

中,每种星座都会有温馨的性格,也可以有温馨爱怜的花色,而摩羯男差很少是内部反差距常的大的了,他们的热情和积极都用在了劳作和上学其中,心情的政工绝比较就从未那么热衷了。然则,他们也轻便被女孩子吃定,看看是哪个种类档次吧!

元类型正是项目标花色。比如大家说 5 是 Int 类型,此时 5 是 Int 类型的三个值。不过假诺自己问 Int 类型占用多少内部存款和储蓄器空间,这一年与具体有些值非亲非故,而和等级次序的音讯有关。如若要写一个函数,重临贰个种类的实例内部存款和储蓄器空间大小。那么那个时候的参数是一个连串数据,这几个项目数据能够是直接表达的比方说是 Int 类型,也能够从一个值身上取,例如 5 那么些值的花色。这里的花色数据,便是二个项指标等级次序,术语表述为元类型:metaType。

原文:https://github.com/electron/electron/blob/master/docs/api/protocol.md
译者:Lin

注册一个自定义合同,况兼拦截现成公约的乞请

图片 1

Swift 中的元类型用 .Type 表示。举例 Int.Type 便是 Int 的元类型。类型与值有着不一致的样式,似乎 Int 与 5 的关联。元类型也是周边,.Type 是体系,类型的 .self 是元类型的值。

进程:主进程

let intMetatype: Int.Type = Int.self

实行三个议和的事例,对file://钻探同样有效:

可能我们平日对元类型使用的可比少,加上那三个方式有一部分近似,二个元类型唯有贰个应和的值,所以利用的时候平日写错:

const {app, protocol} = require('electron')
const path = require('path')

app.on('ready', () => {
    protocol.registerFileProtocol('atom', (request, callback) => {
        const url = request.url.substr(7)
        callback({path: path.normalize(`${__dirname}/${url}`)})
    }, (error) => {
        if (error) console.error('Failed to register protocol')
    })
})
 types.append types.append

注意:除优异表明的点子之外,全数办法都必需在app模块分发ready事件之后选择。

尽管分清了 Int.Type 是系列的称谓,不是值就不会再弄错了。因为您一定不会那样写:

方法

protocol模块有以下方法:

 numbers.append

protocol.registerStandardSchemes(schemes[, options])

  • schemes String[]品种 - 以专门的学业scheme注册自定义scheme。
  • options Object类型(可选参数)
    • secure Boolean类型(可选参数)- true代表安全的挂号scheme。不不过是false

三个行业内部的scheme服从奥迪Q7FC 3986的generic URI syntax。例如httphttps是标准scheme,而file则不是。

注册一个scheme作为标准,当打开服务时将同意相关的和完全一致的财富被准确的剖判。不然scheme将会像file协商同样,未有身份剖析相应的URAV4L。

比方当您利用没有注册为正式scheme的自定义协议加载上面包车型地铁页面时,图片将不会被加载,因为不标准schemes将无法甄别相应的U路虎极光L:

<body>
    ![](test.png)
</body>

登记三个scheme作为规范将同意通过FileSystem API采取文件。不然渲染器将抛出一个安然无事的scheme的一无可取。

私下认可情状下,网页存款和储蓄接口(localStorage, sessionStorage, webSQL, indexedDB, cookies)在不正规的scheme中是不容许行使的。所以一般境况下,假设您想注册二个自定义合同来代替http磋商,你须要注册它为二个规范的scheme:

const {app, protocol} = require('electron')

protocol.registerStandardSchemes(['atom'])
app.on('ready', () => {
    protocol.registerHttpProtocol('atom', '...')
})

注意:其一法子只好够在app模块分发ready事件从前运用。

获得元类型后能够访谈静态变量和静态方法。其实我们平常应用元类型,只是有的时候Xcode 帮大家掩饰了那几个细节。比方大家平时用的 tableView 的二个艺术:

protocol.registerServiceWorkerSchemes(schemes)

  • schemes String[]体系 - 注册自定义scheme来管理service workers。
func register(AnyClass?, forCellReuseIdentifier: String)tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")

protocol.registerFileProtocol(scheme, handler[, completion])

  • scheme String类型
  • handler Function类型
    • request Object类型
      • url String类型
      • referrer String类型
      • method String类型
      • uploadData UploadData[]类型
    • callback Function类型
      • filePath String类型(可选参数)
  • completion Function类型(可选参数)
    • error Error类型

注册scheme中的合同,该合同将会发送文书作为响应。当二个request被使用scheme创建,handler将会被运用handler(request, callback)调用。当scheme被成功注册将会被使用completion(null)调用,当scheme挂号失利将会被利用completion(error)调用。

为了管理requestcallback内需被使用文件的路子大概三个全部path质量的对象来调用,举个例子callback(filePath)callback({path: filePath})

callback并未有被选用另外值或接纳叁个数值或二个具备error质量的靶子而调用的时候,将感到你钦命的error数值是request未果的原委。对于你能够运用的错误数值,你能够查看net error list。

暗中同意景况下,scheme是被管理为邻近http:,像file:无差距于遵守"generic U中华VI syntax"来深入分析分化的商业事务,所以您或者想调用protocol.registerStandardSchemes来让你的scheme被管理为贰个标准scheme。

这里的 AnyClass 其实正是二个元类型:

protocol.registerBufferProtocol(scheme, handler[, completion])

  • scheme String类型
  • handler Function类型
    • request Object类型
      • url String类型
      • referrer String类型
      • method String类型
      • uploadData UploadData[]类型
    • callback Function类型
      • buffer (Buffer | MimeTypedBuffer)类型(可选参数)
  • completion Function类型(可选参数)
    • error Error类型

注册scheme中的左券,该公约将会发送几个Buffer作为响应。

运用上接近于registerFileProtocol,除了callback急需被利用Buffer目的也许多个独具datamimeTypecharset品质的靶子来调用。

例如:

const {protocol} = require('electron')

protocol.registerBufferProtocol('atom', (request, callback) => {
  callback({mimeType: 'text/html', data: new Buffer('<h5>Response</h5>')})
}, (error) => {
  if (error) console.error('Failed to register protocol')
})
typealias AnyClass = AnyObject.Type

protocol.registerStringProtocol(scheme, handler[, completion])

  • scheme String类型
  • handler Function类型
    • request Object类型
      • url String类型
      • referrer String类型
      • method String类型
      • uploadData UploadData[]类型
    • callback Function类型
      • data String类型(可选参数)
  • completion Function类型(可选参数)
    • error Error类型

注册scheme中的合同,该公约将会发送二个String用作响应。

接纳上看似于registerFileProtocol,除了callback急需被采纳String目的或然一个持有datamimeTypecharset性情的对象来调用。

由此地点的概念大家得以精晓,AnyClass 就是七个即兴档期的顺序元类型的别称。当大家拜访静态变量的时候实在也是透过元类型的访问的,只是 Xcode 帮大家大致了 .self。下边七个写法是等价的。借使能够不引起歧义,作者想没人会甘愿多写一个self。

protocol.registerHttpProtocol(scheme, handler[, completion])

  • scheme String类型
  • handler Function类型
    • request Object类型
      • url String类型
      • referrer String类型
      • method String类型
      • uploadData UploadData[]类型
    • callback Function类型
      • redirectRequest Object类型
        • url String类型
        • method String类型
        • session Object类型(可选参数)
        • uploadData Object类型(可选参数)
          • contentType String类型 - 内容的MIME类型。
          • data String类型 - 要发送的剧情。
  • completion Function类型(可选参数)
    • error Error类型

注册scheme中的公约,该合同将会发送三个HTTP恳求作为响应。

选择上看似于registerFileProtocol,除了callback内需被应用redirectRequest对象或许三个持有urlmethodreferreruploadDatasession质量的靶子来调用。

暗中同意景况下,HTTP哀告将重用当前对话。要是您想要央浼三个比不上的谬论,你供给安装sessionnull

对于POST央求,必需提供uploadData对象。

Int.maxInt.self.max

protocol.unregisterProtocol(scheme[, completion])

  • scheme String类型
  • completion Function类型(可选参数)
    • error Error类型

撤回注册scheme的自定义合同。

前面提到通过 type.self都得以获得元类型的值。那么那二种艺术的界别是什么啊?

protocol.isProtocolHandled(scheme, callback)

  • scheme String类型
  • callback Function类型
    • error Error类型

callback将会被应用三个布尔值调用,来注脚那件事是不是有四个对scheme的处理。

let instanceMetaType: String.Type = type(of: "string")let staicMetaType: String.Type = String.self

protocol.interceptFileProtocol(scheme, handler[, completion])

  • scheme String类型
  • handler Function类型
    • request Object类型
      • url String类型
      • referrer String类型
      • method String类型
      • uploadData UploadData[]类型
    • callback Function类型
      • filePath String类型
  • completion Function类型(可选参数)
    • error Error类型

拦截scheme协议,并使用handler用作那么些协议的感受管理器,将发送三个文本作为重临值。

.self 取到的是静态的元类型,评释的时候是什么样类型就是怎么样类型。type 取的是运作时候的元类型,也等于那一个实例 的门类。

protocol.interceptStringProtocol(scheme, handler[, completion])

  • scheme String类型
  • handler Function类型
    • request Object类型
      • url String类型
      • referrer String类型
      • method String类型
      • uploadData UploadData[]类型
    • callback Function类型
      • data String类型(可选参数)
  • completion Function类型(可选参数)
    • error Error类型

拦截scheme协议,并使用handler用作这一个合同的感受管理器,将发送二个String作为重返值。

let myNum: Any = 1 type(of: myNum) // Int.type

protocol.interceptBufferProtocol(scheme, handler[, completion])

  • scheme String类型
  • handler Function类型
    • request Object类型
      • url String类型
      • referrer String类型
      • method String类型
      • uploadData UploadData[]类型
    • callback Function类型
      • buffer Buffer类型(可选参数)
  • completion Function类型(可选参数)
    • error Error类型

拦截scheme协议,并使用handler作为那个合同的体会管理器,将发送叁个Buffer作为重回值。

多多个人对 Protocol 的元类型轻巧精晓错。Protocol 本人不是贰个连串,独有当一个对象实现了 protocol 后才有了品种对象。所以 Protocol.self 不等于 Protocol.Type。假若您写上边的代码会赢得叁个荒谬:

protocol.interceptHttpProtocol(scheme, handler[, completion])

  • scheme String类型
  • handler Function类型
    • request Object类型
      • url String类型
      • referrer String类型
      • method String类型
      • uploadData UploadData[]类型
    • callback Function类型
      • redirectRequest Object类型
        • url String类型
        • method String类型
        • session Object类型(可选参数)
        • uploadData Object类型(可选参数)
          • contentType String类型 - 内容的MIME类型。
          • data String类型 - 要发送的原委。
  • completion Function类型(可选参数)
    • error Error类型

拦截scheme协议,并使用handler用作那么些公约的感受管理器,将发送贰个新的HTTP央浼作为再次回到值。

protocol MyProtocol { }let metatype: MyProtocol.Type = MyProtocol.self

protocol.uninterceptProtocol(scheme[, completion])

  • scheme String类型
  • completion Function类型(可选参数)
    • error Error类型

移除二个业已设置的scheme的拦截器,何况复苏它为原始的处理方式。

科学的掌握是 MyProtocol.Type 也是多个一蹴而就的元类型,那么就需若是一个可继承的花色的元类型。所以改成这么就足以了:

struct MyType: MyProtocol { }let metatype: MyProtocol.Type = MyType.self 

那么 Protocol.self 是怎样品种呢?为了满足你的好奇心苹果为你造了二个品类:

let protMetatype: MyProtocol.Protocol = MyProtocol.self

为了让大家能够熟知元类型的行使本身举三个事例。若是我们有四个 Cell 类,想要一个工厂方法能够依据项目初步化对象。上边是多少个 Cell 类:

protocol ContentCell { }class IntCell: UIView, ContentCell { required init(value: Int) { super.init(frame: CGRect.zero) } required init?(coder aDecoder: NSCoder) { fatalError("init has not been implemented") }}class StringCell: UIView, ContentCell { required init(value: String) { super.init(frame: CGRect.zero) } required init?(coder aDecoder: NSCoder) { fatalError("init has not been implemented") }}

工厂方法的实现是那样的:

func createCell(type: ContentCell.Type) -> ContentCell? { if let intCell = type as? IntCell.Type { return intCell.init } else if let stringCell = type as? StringCell.Type { return stringCell.init(value: "xx") } return nil}let intCell = createCell(type: IntCell.self)

本来大家也足以选用项目估算,再组成泛型来使用:

func createCell<T: ContentCell>() -> T? { if let intCell = T.self as? IntCell.Type { return intCell.init as? T } else if let stringCell = T.self as? StringCell.Type { return stringCell.init(value: "xx") as? T } return nil}// 现在就根据返回类型推断需要使用的元类型let stringCell: StringCell? = createCell()

在 Reusable 中的 tableView 的 dequeue 选拔了临近的落到实处:

func dequeueReusableCell<T: UITableViewCell>(for indexPath: IndexPath, cellType: T.Type = T.self) -> T where T: Reusable { guard let cell = self.dequeueReusableCell(withIdentifier: cellType.reuseIdentifier, for: indexPath) as? T else { fatalError("Failed to dequeue a cell") } return cell }

dequeue 的时候就足以依靠指标项目测度,无需再额外申明元类型:

 class MyCustomCell: UITableViewCell, Reusable tableView.register(cellType: MyCustomCell.self)let cell: MyCustomCell = tableView.dequeueReusableCell(for: indexPath)

Whats Type And Self Swift MetatypesANYCLASS,元等级次序和 .SELF

  • 天涯论坛:@没好玩的事的卓同学

  • 即便想与本身有更全面的沟通也能够投入小编的文化星球:iOS 程序员爱慕组织

本文由王中王大公开内部一码发布于买车用车,转载请注明出处:中的元类型,摩羯男最容易被哪种女生吃定

关键词: