我在将“结果”类型的数组强制转换为字符串数组时遇到问题。这是我已经尝试过的:
编辑: 我需要使用String类型的信息,因为我想使用URL作为图像源。
swift4
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)
答案 0 :(得分:1)
我认为没有[Array]
这样的东西,我想您是在谈论Array<Result>
。 Result
对象的数组。与[Result]
相同。
如果出于某种原因要从Array
创建一个新的ArraySlice
对象,只需调用一个初始化程序。
let resultsArray = Array(latestImageURls ?? [])
更新
您是说还需要将Result
对象转换为String
,但是您没有解释Result
对象是什么以及它如何与对象相关到String
。它是包含还是是字符串?所以我会假设。
如果您想cast
反对String
,则可以这样做
let latestImageURlsArray = resultsArray.compactMap { $0 as? String }
如果您希望从结果中extract
来获取字符串,(例如,它存储在imageURL
参数中),您可以这样做
let latestImageURlsArray = resultsArray.compactMap { $0.imageURL }
之后,latestImageURlsArray
将是[String]
。
如果关系完全不同并且更加复杂,请添加有关Result
类的更多详细信息,以便我可以更具体地回答。
答案 1 :(得分:0)
[Array]
”。您没有采取任何措施使情况成为现实。无论如何,这甚至是无效的,因为Array
不是有效的类型。prefix
返回一个ArraySlice<T>
,它提供了对Array<T>
内存的轻量级视图,而无需复制任何元素。答案 2 :(得分:0)
通常,将给定类型的ArraySlice
转换为该类型的Array
的方式是使用数组初始化程序:
struct Thing {
}
let things = [Thing]()
let sliceOfArrayOfThings = things.prefix(2)
let arrayOfThings = Array(sliceOfArrayOfThings)
在您的情况下,您的Array实际上是一个Optional数组,因此您必须采取一些额外的步骤来处理可选性,如Yury在他的回答中所述:
let things: [Thing]? = []
let sliceOfArrayOfThings = things?.prefix(2)
let arrayOfThings = Array(sliceOfArrayOfThings ?? [])