Snažil som sa zobraziť údaje analyzované z JSON na a UITableView
, použil som SwiftyJSON
analyzovať dáta a potom odovzdať pole inému radiču.
použil som NSArray
vynútiť JSON na pole. Keď vytlačené údaje vytlačím, zobrazí sa takto:
(
"string one",
"string two"
)
Potom vo vnútri
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
funkcie, som použil
let urls: String = sshoString[indexPath.item] as! String
Keď tlačím pole vo funkcii cellForItemAt
bez toho, aby bol typom reťazec, vytlačí:
string one
string two
ale keď donútim typ String, spadne a zobrazí nasledujúce:
Could not cast the value of type "SwiftyJSON.JSON" to "Swift.String".
Ako to dosiahnuť? Ako ho prinútiť, aby sa stal reťazcom?
AKO BOLO POŽADOVANÉ:
var featuredScreenshots:NSArray = NSArray()
var featuredssho = NSMutableArray()
for items in json["featured"].arrayValue {
featuredssho.add(items["screenshots"].arrayValue)
}
self.featuredScreenshots = featuredssho as NSArray
potom som to odovzdal druhému kontroléru:
let vc = self.storyboard?.instantiateViewController(withIdentifier: "DetailsView") as! DetailsView
vc.sshoString = featuredScreenshots[indexPath.row] as! NSArray
odpovede:
1 pre odpoveď č. 1Prístup k prvku JSON v službe SwiftyJSON vráti typ JSON
.
Ak chcete získať hľadaný typ, musíte použiť zahrnuté vlastnosti typu JSON takto:
let urls: String = sshoString[indexPath.item].string!
So spoločnosťou SwiftyJSON .string
je voliteľného typu String?
, preto som tu nechal rozbalenú silu. Vo všeobecnosti by ste sa mali vyhnúť uvoľneniu sily, preto odporúčam vykonať niečo v tomto smere:
if let urls = sshoString[indexPath.item].string {
//urls is now type String, and you can use it as needed
}
Odporúčam skontrolovať dokumentáciu SwiftyJSON, pretože ide o podrobnejšie informácie a ukazuje ďalšie príklady použitia .int
, .bool
, .url
, atď., aby ste získali požadované hodnoty.
1 pre odpoveď č. 2
Áno, niekedy sa musí staťpriradiť hodnotu JSON štandardnej typovej hodnote, ako je String alebo Dictionary ,,, atď. V zásade, ako je opísané vyššie a podľa dokumentácie swiftyJson, má svoj vlastný spôsob konverzie ako .dicitonárny, .stringvalue ,,, atď. Problém však spočíva v tom, že kompilátor v čase kompilácie nedokáže prečítať hodnotu, ktorú priraďujeme ako typ JSON tak to jednoducho odliate ako JSON, potom použite spôsob swiftyJson na uspokojenie potrebného typu hodnoty, EX:
Štruktúra NormalStringName
{
názov var: String!
}
a máme nameValue analyzované z backendu alebo kdekoľvek s swiftyJSON tak, aby to bolo možné priradiť nameValue k našej štruktúrovanej inštancii, ktorá očakáva normálny reťazec, robíme toto:
_ = NormalStringName (meno :(nameValue as! JSON) .stringValue
Dúfam, že to pomôže a opýtajte sa, ak nie je jasné.