使用Swift 2中的Parse获取Twitter个人资料图像

时间:2015-10-25 05:11:50

标签: ios swift twitter parse-platform

我正在尝试使用swift 2获取Twitter个人资料图片。

此链接说明了如何为swift完成: Getting Twitter profile image with Parse in Swift

但事情是NSURLConnection现已弃用,并由NSURLSession取代。 PFTwitterUtils.twitter()?.signRequest需要NSMutableURLRequest,但从提到的方法来替换同步请求我得到NSURLRequest。如何使代码工作?

我尝试编写此代码以使其正常工作,但我感到难过:

     if PFTwitterUtils.isLinkedWithUser(PFUser.currentUser()!) {

        let screenName = PFTwitterUtils.twitter()?.screenName!


        let requestString = NSURL(string: "https://api.twitter.com/1.1/users/show.json?screen_name=" + screenName!)
        let request = NSURLRequest(URL: requestString!, cachePolicy: .ReloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 5.0)


        PFTwitterUtils.twitter()?.signRequest(request)

        var response: NSURLResponse?
        var error: NSError?



        let session = NSURLSession.sharedSession()

        session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in
            print(data)
            print(response)
            print(error)
        }).resume()



        if error == nil {

            let result = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments, error: &error)


            let names: String! = result?.objectForKey("name") as! String

            let separatedNames: [String] = names.componentsSeparatedByString(" ")

            //self.firstName = separatedNames.first!
            //self.lastName = separatedNames.last!


            let urlString = result?.objectForKey("profile_image_url_https") as! String

            let hiResUrlString = urlString.stringByReplacingOccurrencesOfString("_normal", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil)


            let twitterPhotoUrl = NSURL(string: hiResUrlString)
            let imageData = NSData(contentsOfURL: twitterPhotoUrl!)
            let twitterImage: UIImage! = UIImage(data:imageData!)
        }

NSURLConnection throws after updating to Swift 2.0

1 个答案:

答案 0 :(得分:2)

根据您的代码,我能够使用以下方式检索Twitter图像:

if PFTwitterUtils.isLinkedWithUser(PFUser.currentUser()!) {

    let screenName = PFTwitterUtils.twitter()?.screenName!
    let requestString = NSURL(string: "https://api.twitter.com/1.1/users/show.json?screen_name=" + screenName!)
    let request = NSMutableURLRequest(URL: requestString!, cachePolicy: .ReloadIgnoringLocalAndRemoteCacheData, timeoutInterval: 5.0)
    PFTwitterUtils.twitter()?.signRequest(request)
    let session = NSURLSession.sharedSession()

    session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in
        print(data)
        print(response)
        print(error)

        if error == nil {
            var result: AnyObject?
            do {
                result = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments)
            } catch let error2 as NSError? {
                print("error 2 \(error2)")
            }

            let names: String! = result?.objectForKey("name") as! String
            let separatedNames: [String] = names.componentsSeparatedByString(" ")

            //self.firstName = separatedNames.first!
            //self.lastName = separatedNames.last!

            let urlString = result?.objectForKey("profile_image_url_https") as! String
            let hiResUrlString = urlString.stringByReplacingOccurrencesOfString("_normal", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil)
            let twitterPhotoUrl = NSURL(string: hiResUrlString)
            let imageData = NSData(contentsOfURL: twitterPhotoUrl!)
            let twitterImage: UIImage! = UIImage(data:imageData!)
        }
    }).resume()
}

我将结果处理滚动到数据任务中并修复了对Swift 2的JSONObjectWithData:options:调用。