Ios 扩展NSCoding以符合URL

Ios 扩展NSCoding以符合URL,ios,swift,Ios,Swift,我是swift新手,希望扩展NSCoding以符合URL类型。我需要定义一个输入和输出类型,并始终获取错误类型“URL”不符合协议“NSCoding” //what it looks like before entering types DiskCacheLevel<<#K: StringConvertible#>, NSCoding>() //what I want it to look like (<InputType, OutputType>) Dis

我是swift新手,希望扩展
NSCoding
以符合URL类型。我需要定义一个输入和输出类型,并始终获取错误
类型“URL”不符合协议“NSCoding”

//what it looks like before entering types
DiskCacheLevel<<#K: StringConvertible#>, NSCoding>()

//what I want it to look like (<InputType, OutputType>)
DiskCacheLevel<URL, URL>() //here the error occurs
//输入类型之前的外观
DiskCacheLevel()
//我希望它看起来像什么()
DiskCacheLevel()//此处发生错误
我如何扩展它,使其也符合类型
URL

您有两个问题:

  • 您不能“扩展
    NSCoding
    以符合类型URL”,因为您不能扩展协议以符合任何内容,并且
    URL
    不是可以符合的协议。大概您的意思是希望扩展
    URL
    以符合
    NSCoding

  • 您不能扩展
    URL
    以符合
    NSCoding
    ,因为只有类才能符合
    NSCoding
    ,但
    URL
    是一个结构

您可以使用
NSURL
而不是
URL
NSURL
是一个类,您可以在
NSURL
URL
之间自由转换。由于
NSURL
已经符合
NSCoding
,因此不必为此编写扩展

let cache = DiskCacheLevel<URL, NSURL>()

let key = URL(...)
let value = URL(...)
cache[key] = value as NSURL
let cache=DiskCacheLevel()
let key=URL(…)
让值=URL(…)
缓存[键]=值为NSURL

< /代码>免费桥接基础类<代码> NSURL<代码>符合<代码> NS(安全)编码< /代码>。只需将
URL
类型连接到
NSURL
即可,反之亦然。那么,在代码中不应该是另一种方式吗?首先是URL,然后是NSURL: