In Swift 3, try the following code:
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
let myView = UIView(frame: CGRect(x: 0, y: 0, width: pickerView.bounds.width - 30, height: 60))
let myImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
var rowString = String()
switch row {
case 0:
rowString = "Washington"
myImageView.image = UIImage(named:"washington.jpg")
case 1:
rowString = "Beijing"
myImageView.image = UIImage(named:"beijing.jpg")
case 2: break
default:
rowString = "Error: too many rows"
myImageView.image = nil
}
let myLabel = UILabel(frame: CGRect(x: 60, y: 0, width: pickerView.bounds.width - 90, height: 60))
myLabel.text = rowString
myView.addSubview(myLabel)
myView.addSubview(myImageView)
return myView
}