JSON结果对象化



本节参考代码


result1.png


result2.png



重点内容


1.如何将JSON结果对象化;


2.掌握如何获取图片到APP的collectionView(是界面的变量名字)上。



内容简介


既然我们已经获取到consumer key了,我们就应该把参数 放到请求当中去。


result3.png


获取到之后我们应该做些什么呢?此时我们就可以完善对图片的操作以及对象化图片了。那么具体怎样完善呢?


这里就有五个步骤:


1.正常的把有授权的JSON对象获取。


2.再格式化查看一下获取到的有授权的JSON对象。(可以省略此步骤)


3.对象化:将我们获取到的JSON对象变成我们可以操作的swift对象。


4.筛选非安全图片nsfw(not safe for working):因为在网站中有些图片即使已经获取了授权仍旧是不可以用的,在格式化查看的时候它会有个属性叫做nsfw,如果是nsfw:true则是不能再APP中用的,而如果是false的话就表明我们是可以在APP中使用的。


5.映射为对象:将图片映射为图片类的对象。



具体的操作是这样的


1.首先我们将consumer key先使用。


如下图:


result4.png


参数中:“consumer_key”来自于前面提到的API文档中:parameters为一个字典。“consumer_key”为名称,后面的值就是我们获取的consumer key。


result5.png


ResponseJSON的参数第一个是本次请求提交的地址,第二个暂时不要了,使用下划线,第三个返回类型时json,而第四个参数错误也暂时不管,以下划线代替。使用如图:


result6.png


2.解析与查看JSON对象


然后我们再将req,以及json打印出来看看是什么。


result7.png


部分结果如图:


result8.png


而图中蓝色部分就是我们获取的资源的完整的网址。下面的就是JSON对象。


我们可以copy网址到浏览器打开,我们也能看到它返回JSON对象的具体信息。部分信息如图:


result9.png


我们将它copy到格式化工具中进行解析可以看到:


result10.png


我们展开其中最重要的一栏;photos,以下是有关信息:


result11.png


result12.png


注:图中 的nsfw就是我们之前说的可以用的图片。而下面的请求网址是可以直接访问的。当然问问得到的图片相较于网站上的会有一定比例的缩小,适合在APP使用。


3.对象化


为方便我们使用图片的相关信息,我们可以在模板程序中创建图片的一个类,其中包含的信息和我们解析出来的大部分一致。如图:


result120.png


4.筛选非安全图片nsfw


之后呢我们就可以使用相关操作,如下图做了一个判断,用于筛选出能够使用的图片:


result121.png


let j=json as ?NSDictionary:强制转换为字典类型


var safePhotos…:定义变量以及赋值,有图可以看出safePhotos为一个数组。


之后的代码即是筛选。


于是我们筛选出了我们能用的图片。


5.映射为对象


那接下来呢?我们要把图片对象化,每一张图片都变成变成图片类PhotoInfo的对象。那怎么做呢?


我们可以用将图片的数组来对对象赋值类似的方法来实现不就可以了吗?对吧于是方法图如下:


result122.png


注:图中用到了数组的map方法(返回用户自定义函数作用后的数组)。


6.添加


对象化之后我们就应该将图片添加APP的界面(CollectionView是界面的变量名字)上了,那界面想必有一个在程序中与之对应的数据源。那数据源在哪里呢?在这里,它在控制器中定义好了:


result123.png


我们很多对象都是用数组,而这里我们却不是用的数组,而用的集合(set)。这个集合的性质和我们高中所学的集合性质是一样的,就是集合中不能有相同的元素。这就意味中的我们的图片中是不含有相同的图片的。


注意:目前我们使用的Xcode6.1.1还没有set类型,当然6.1.2已经含有了这个类型。


于是我们只能暂时使用Object C时代的NSSet了。NSSet有两个我们主要要使用的子类NSOrderSet(排过序的,不能改变内容的)和NSMutablelOrderSet(可以改变和更新排序过的内容的)。


现在我们要把新取到的数据添加到数据源中去,怎么加呢?使用集合的add方法即可。如下图:


result124.png


那这样呢,我们就已经添加了图片到APP了,但是这使我们会发现,再次运行之后呢,主界面上,仍然没有图片显示。这是为什么呢?


这是因为啊,我们没有对主界面(collectionView)产生的方法做一个定义或者说操作,使得图片显示到界面上面。所以呢,没有显示图片。那接下来呢,我们就会具体的讲解怎么使其显示到界面(collectionView)上。



【本文由麦子学院独家原创,转载请注明出处并保留原文链接】

logo
© 2012-2016 www.maiziedu.com
蜀ICP备13014270号-4 Version 5.0.0 release20160127

免费领取价值1888元求职宝典!

客服热线 400-862-8862

回到顶部