代码之家  ›  专栏  ›  技术社区  ›  Jake2Finn

转换“Result?”类型的值键入“String”

  •  0
  • Jake2Finn  · 技术社区  · 8 年前

    编辑: 我需要字符串类型的信息,因为我想使用URL作为图像源。

    let message = try? JSONDecoder().decode(Welcome.self, from: data)
    let imageURLs = message?.children.attachment.results.filter({ $0.metadata.mediaType == "image/png" })
    let latestImageURls = imageURLs?.prefix(2)
    let latestImageURlsArray = Array(latestImageURls ?? [])
    
    let image1 = self.view.viewWithTag(63) as! UIImageView
    let image2 = self.view.viewWithTag(64) as! UIImageView
    let image3 = self.view.viewWithTag(65) as! UIImageView
    
    let url1 = URL(string: latestImageURlsArray[0]) // error:Cannot convert value of type 'Result' to expected argument type 'String
    let url2 = URL(string: latestImageURlsArray[1]) // error:Cannot convert value of type 'Result' to expected argument type 'String
    let url3 = URL(string: latestImageURlsArray[2]) // error:Cannot convert value of type 'Result' to expected argument type 'String
    
    image1.kf.setImage(with: url1)
    image2.kf.setImage(with: url2)
    image3.kf.setImage(with: url3)
    
    3 回复  |  直到 8 年前
        1
  •  1
  •   Yury Imashev    8 年前

    [Array] ,我想你是在说 Array<Result> Result 对象。什么是一样的 [Result]

    如果出于某种原因你想创建一个新的 Array 你的反对 ArraySlice ,只需调用初始值设定项。

    let resultsArray = Array(latestImageURls ?? [])
    

    你是说你还需要改变 对象放入 String 但你不解释什么是 结果 对象和它如何与 . 是吗 包含 不管怎样

    cast 你反对 字符串

    let latestImageURlsArray = resultsArray.compactMap { $0 as? String }
    

    如果你想的话 extract 如果结果中有字符串,(假设它存储在 imageURL 参数)你可以这样做

    let latestImageURlsArray = resultsArray.compactMap { $0.imageURL }
    

    之后, latestImageURlsArray 将是一个 [String]

    如果关系完全不同且更复杂,请添加有关 结果

        2
  •  0
  •   Alexander    8 年前
    1. 你不是在演什么角色,你只是在说“我希望 [Array] Array
    2. 如你所见, prefix 返回 ArraySlice<T> ,它为内存提供了一个轻量级视图 Array<T> ,而不复制任何元素。
        3
  •  0
  •   Duncan C    8 年前

    一般来说,转换 ArraySlice 一个给定类型的 Array 使用数组初始值设定项:

    struct Thing {
    }
    
    let things = [Thing]()
    let sliceOfArrayOfThings = things.prefix(2)
    let arrayOfThings = Array(sliceOfArrayOfThings)
    

    在您的例子中,数组实际上是一个可选数组,因此您必须采取一些额外的步骤来处理可选性,正如Yury在回答中所描述的那样:

    let things: [Thing]? = []
    let sliceOfArrayOfThings = things?.prefix(2)
    let arrayOfThings = Array(sliceOfArrayOfThings ?? [])