/ / Nepodarilo sa preniesť hodnotu typu „SwiftyJSON.JSON“ na „Swift.String“ - ios, json, swift3, swifty-json

Hodnotu typu swiftyJSON.JSON nemožno odovzdať do 'Swift.String' - ios, json, swift3, swifty-json

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ď č. 1

Prí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é.