如何从url下载图像并附加UIImageView数组(iOS) @ibvar-imgView:UIImageView! @IBV弱var imgPicker:UIPickerView! 让选取器查看列=1 让选择器查看高度:CGFloat=80 var imageArray=[UIImage?]() var imageFileName=[“dongbinggo1.png”、“dongbinggo2.png”、“dongbinggo3.png”] 重写func viewDidLoad(){ super.viewDidLoad() //加载视图后执行任何其他设置。 对于0..Int中的i{ 返回选择器\视图\列 } func pickerView(pickerView:UIPickerView,rowHeightForComponent:Int)->CGFloat{ 返回选择器\视图\高度 } func pickerView(pickerView:UIPickerView,numberOfRowsInComponent:Int)->Int{ 返回imageFileName.count } func pickerView(pickerView:UIPickerView,viewForRow行:Int,forComponent组件:Int,重用视图:UIView?->UIView{ 让imageView=UIImageView(图像:imageArray[行]) imageView.frame=CGRect(x:0,y:0,宽度:50,高度:50) 返回图像视图 } func pickerView(pickerView:UIPickerView,didSelectRow行:Int,不完整组件:Int){ imgView.image=imageArray[行] }

如何从url下载图像并附加UIImageView数组(iOS) @ibvar-imgView:UIImageView! @IBV弱var imgPicker:UIPickerView! 让选取器查看列=1 让选择器查看高度:CGFloat=80 var imageArray=[UIImage?]() var imageFileName=[“dongbinggo1.png”、“dongbinggo2.png”、“dongbinggo3.png”] 重写func viewDidLoad(){ super.viewDidLoad() //加载视图后执行任何其他设置。 对于0..Int中的i{ 返回选择器\视图\列 } func pickerView(pickerView:UIPickerView,rowHeightForComponent:Int)->CGFloat{ 返回选择器\视图\高度 } func pickerView(pickerView:UIPickerView,numberOfRowsInComponent:Int)->Int{ 返回imageFileName.count } func pickerView(pickerView:UIPickerView,viewForRow行:Int,forComponent组件:Int,重用视图:UIView?->UIView{ 让imageView=UIImageView(图像:imageArray[行]) imageView.frame=CGRect(x:0,y:0,宽度:50,高度:50) 返回图像视图 } func pickerView(pickerView:UIPickerView,didSelectRow行:Int,不完整组件:Int){ imgView.image=imageArray[行] },ios,swift,Ios,Swift,我想从url下载图像并插入UIPickerView,然后选择pick并在UIImageView中显示。我想在下载完所有图像后追加UIImage数组 我不知道如何插入代码以及插入代码的位置。您尝试使用MAX\u ARRAY\u NUM,但您的imageFileName仅包含3个文件名。imageArray是一个空数组,但您尝试获取数组中不存在的0索引值 这些是主要问题 @IBOutlet weak var imgView: UIImageView! @IBOutlet weak var imgPi

我想从url下载图像并插入
UIPickerView
,然后选择pick并在
UIImageView
中显示。我想在下载完所有图像后追加
UIImage
数组


我不知道如何插入代码以及插入代码的位置。

您尝试使用
MAX\u ARRAY\u NUM
,但您的
imageFileName
仅包含3个文件名。
imageArray
是一个空数组,但您尝试获取数组中不存在的0索引值

这些是主要问题

@IBOutlet weak var imgView: UIImageView!
@IBOutlet weak var imgPicker: UIPickerView!

let PICKER_VIEW_COLUMN = 1
let PICKER_VIEW_HEIGHT: CGFloat = 80
var imageArray = [UIImage?]()
var imageFileName = ["dongbinggo1.png","dongbinggo2.png","dongbinggo3.png"]

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    for i in 0..<imageFileName.count{
        downLoadItems(imageFileName[i])
    }
    imgView.image = imageArray[0]
}
func downLoadItems(_ imgName: String){
    let url = URL(string: "http://(myIP)/test/\(imgName)")!
    let defaultSession = Foundation.URLSession(configuration: URLSessionConfiguration.default)

    let task = defaultSession.dataTask(with: url){(data, response, error) in
        if error != nil{
            print("Failed to download data")
        }else{
            DispatchQueue.main.async{
                let image = UIImage(data: data!)!
                self.imageArray.append(image)
            }
            print("Data is downloaded")
        }
    }
    task.resume()
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return PICKER_VIEW_COLUMN
}
func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
    return PICKER_VIEW_HEIGHT
}

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return imageFileName.count
}

func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
    let imageView = UIImageView(image: imageArray[row])
    imageView.frame = CGRect(x:0,y:0,width: 50, height: 50)

    return imageView
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    imgView.image = imageArray[row]
}
var-imageArray=[UIImageView?]()
var imageFileName=[“dongbinggo1.png”、“dongbinggo2.png”、“dongbinggo3.png”]

对于0中的i..您有任何错误吗?出现索引范围错误。我认为图像不会附加数组。您应该等到收到网络调用的响应。您可以将完成块添加到
下载项
方法中,并分配imgView图像。顺便说一句,我强烈建议存储
[UIImage]
,而不是
[UIImageView]
,并将图像分配给
imgView
它将崩溃。
下载项
是异步方法,因此imageArray[0]将崩溃应用程序,因为数组上的
下标
方法将超出范围。现在,我编辑了答案,请使用`imageArray.first
,而不是
imageArray[0]
。但因为它在
视图中()`它将在下载完图像之前被调用。所以你最好在
打印(“数据已下载”)之前调用它。
谢谢你的回答。但是我在下面重新注册了这个问题,并做了一些解释。@FaysalAhmed
subscript
不返回可选值,如果索引超出范围,它将引发fatalError
var imageArray = [UIImageView?]()
var imageFileName = ["dongbinggo1.png","dongbinggo2.png","dongbinggo3.png"]

 for i in 0..<imageFileName.count {
      downLoadItems(imageFileName[i])
 }

if let imgView = imageArray[0] { 
     self.imgView = imgView
 }