Я пытаюсь создать массив объектов в PHP, а затем повторить его для использования в Swift. Я могу получить один объект, чтобы показать в Swift, когда я делаю println
на объекте JSON, но мне нужно много объектов, отраженных.
class catRow{
public $id;
public $person;
public $item;
public $descr;
public $link;
public $price;
}
$prepare_string = "SELECT * FROM items ORDER BY person LIMIT 5";
$stmt = $dbh->prepare($prepare_string);
$stmt->execute();
while($row = $stmt->fetch()){
$catRow = new stdClass;
$catRow-> id = $row['id'];
$catRow-> person = $row['person'];
$catRow-> item = $row['item'];
$catRow-> descr = $row['descr'];
$catRow-> link = $row['link'];
$catRow-> price = $row['price'];
$allRows[] = $catRow;
}
echo json_encode($allRows);
А потом со стороны Свифта я (обобщенно):
let catalogueRows: NSDIctionary = NSJSONSerialization.JSONObjectWithData(dataObject!, options: nil, error: nil) as NSDictionary
println(catalogueRows)
Это работает, когда я эхо $catRow
но я хочу отобразить каждую строку из этой таблицы в моей базе данных.
allRows
это массив, а не словарь. Так что вы должны бросить catalogueRows
к NSArray
:
var error: NSError?
if let catalogueRows = NSJSONSerialization.JSONObjectWithData(dataObject!, options: nil, error: &error) as? NSArray {
// successful, do something with `catalogueRows`
println(catalogueRows)
} else {
println("parse error: /(error)")
}
Или, может быть, даже лучше, приведите его к массиву словарей Swift:
var error: NSError?
if let catalogueRows = NSJSONSerialization.JSONObjectWithData(dataObject!, options: nil, error: &error) as? [[String: AnyObject]] {
// successful, do something with `catalogueRows`
println(catalogueRows)
} else {
println("parse error: /(error)")
}
Обратите внимание, что в обоих этих случаях я (а) фиксирую error
объект; и (б) использовать if let
синтаксис для изящной обработки сбоев.
Других решений пока нет …