我正在学习swift,我终于找到了如何异步加载图像。我现在要做的是将该代码传递给我的TableView,但是考虑到我的代码文件是如何构造的,我有点难以理解。首先是显示单个图像的代码。
login.swift:
let imgURL: NSURL = NSURL(string: "my-url")!
let request:NSURLRequest = NSURLRequest(url: imgURL as URL)
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
let task = session.dataTask(with: request as URLRequest, completionHandler: {(data, response, error) in
DispatchQueue.main.async(execute: { () -> Void in
self.Profile_Image.image = UIImage(data: data!)
})
});
task.resume()
上面的代码正确呈现了一个图像现在我想传递该代码并将其插入到TableView中:我有2个文件1用于TableViewCell,另一个用于带有TableView的控制器。
TableViewCell.swift:
class TableViewCell: UITableViewCell {
@IBOutlet weak var fullname: UIButton!
@IBOutlet weak var profile_image: UIImageView!
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}
Controller.swift:
class Controller: UIViewController,UITableViewDataSource {
var FullName = [String]()
var profile_image_string = [String]()
@IBOutlet weak var TableSource: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
TableSource.dataSource = self
getJsonData()
}
func getJsonData() {
URLSession.shared.dataTask(with:request, completionHandler: {(data, response, error) in
if error != nil {
} else {
do {
let parsedData = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! [String:Any]
if let Streams = parsedData["JsonData"] as? [AnyObject] {
for Stream in Streams {
if let fullname = Stream["fullname"] as? String {
self.FullName.append(fullname)
}
if let profile_picture = Stream["profile_image"] as? String {
self.profile_image_string.append(profile_picture)
}
}
DispatchQueue.main.async {
self.TableSource.reloadData()
}
}
} catch let error as NSError {
print(error)
}
}
}).resume()
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "TVC", for: indexPath) as! TableViewCell
cell.fullname.setTitle(FullName[indexPath.row],for: UIControlState.normal)
cell.profile_image.tag = indexPath.row
return cell
}
}
好的,所以在我的控制器类的顶部我有变量 var profile_image_string ,它基本上保存了来自Json的所有不同的URL然后我使用这个代码附加它
if let profile_picture = Stream["profile_image"] as? String {
self.profile_image_string.append(profile_picture)
}
现在我只能访问TableView代码中的ImageView属性,如何显示我的图像?如果你能看到TableView(UITableViewCell)里面的代码我通过这样做访问imageView
cell.profile_image. ///
任何建议都会很棒......
答案 0 :(得分:1)
您可以定义以下cellForRowAt
方法:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "TVC", for: indexPath) as! TableViewCell
cell.fullname.setTitle(FullName[indexPath.row],for: UIControlState.normal)
cell.profile_image.tag = indexPath.row
/* Set your cell image here*/
let strCellImageURL = yourArray.objectAtIndex(indexPath.row)
let imgURL: NSURL = NSURL(string: strCellImageURL)!
let request:NSURLRequest = NSURLRequest(url: imgURL as URL)
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
let task = session.dataTask(with: request as URLRequest, completionHandler: {(data, response, error) in
DispatchQueue.main.async(execute: { () -> Void in
cell.Profile_Image.image = UIImage(data: data!)
})
});
return cell
}
我认为如果Native中已经有了好东西,那么我们为什么要选择第三方类。
如果您需要任何澄清,那么您可以在下面发表评论。