无法使用索引类型为“String”的类型'[HTTPCookiePropertyKey:Any]'下标值

时间:2018-01-08 20:24:02

标签: ios arrays swift swift4

  

错误:无法使用String

类型的索引下标类型为[HTTPCookiePropertyKey : Any]的值

代码:

func copyCookiesForEx() {
    if let cookies = HTTPCookieStorage.shared.cookies(for: NSURL(string: kEHentaiURL)! as URL) {
        print(cookies)
        for c in cookies {
            if var properties = c.properties {
                properties["Domain"] = ".exhentai.org" -< error is here
                if let newCookie = HTTPCookie(properties: properties) {
                    HTTPCookieStorage.shared.setCookie(newCookie)
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:2)

错误消息明确指出问题所在。 properties的类型为Dictionary<HTTPCookiePropertyKey,Any>,因此您无法使用String作为订阅的关键字。

您必须使用HTTPCookiePropertyKey.domain代替"domain"

如果您可以直接使用NSURL(string:)的相同初始化方法,则也不应使用URL然后将其强制转换为URL

func copyCookiesForEx() {
    if let cookies = HTTPCookieStorage.shared.cookies(for: URL(string: kEHentaiURL)!) {
        if var properties = c.properties {
            properties[.domain] = ".extentai.org" // HTTPCookiePropertyKey.domain
            if let newCookie = HTTPCookie(properties: properties) {
                HTTPCookieStorage.shared.setCookie(newCookie)
            }
        }
    }
}

答案 1 :(得分:1)

Swift 4为可靠性和稳健性引入了许多新的关键结构。

只是

properties[.domain] = ".exhentai.org"

请阅读HTTPCookiePropertyKey

的文档

不要在Swift 3+中使用NSURLURL进行丑陋演员,请始终使用原生结构URL

... cookies(for:URL(string: kEHentaiURL)!) { ...