2017-02-26 6 views
-3

私はlinkedInのログインを作成するために私のアプリでlinkedIn SDKを使用しています。swift nil form dictionary

私はAPIから会社名を取得しますが、行にnilを得続けるしようとしています:

プリント(以下 "当社:!(companyString)")

辞書としてあります次の:

012:

["publicProfileUrl": https://www.linkedin.com/in/joebloggs, "formattedName": Joe Bloggs, "id": Zazobgtf1Q, "pictureUrls": { 
    "_total" = 1; 
    values =  (
     "https://media.licdn.com/mpr/mprx/0_xBXVf6v56zJf42DuUQJy70N69gfspmi8VYJMYZq_Q6X8SCm_a-4jUmz6FF4wOai_xjJMpPN_qiNQ7xaiUpvv4jq5_iN67xx8apv4S6HL9JLf7HadaZ5JIuNzlJ" 
    ); 
}, "pictureUrl": https://media.licdn.com/mpr/mprx/0_OzOPtLSS9GH8gFDYUA6-xtfSKPkgY5YmNkEPBAGSc5ypRvS_AzXjVcuSNssssXO_qkE1Mi_DxXcyZT2mBQR7sAa3VXcjZTdGlQRKlrR2ALGltB-YjcSOAkzjslDDATY14Lxx9mjGA2G, "lastName": Bloggs, "emailAddress": [email protected], "positions": { 
    "_total" = 1; 
    values =  (
       { 
      company =    { 
       id = 9433004; 
       industry = "Marketing & Advertising"; 
       name = "Company Name"; 
       size = "2-10"; 
       type = "Privately Held"; 
      }; 
      id = 865817330; 
      isCurrent = 1; 
      location =    { 
       country =     { 
        code = gb; 
        name = "United Kingdom"; 
       }; 
       name = "Leeds, United Kingdom"; 
      }; 
      startDate =    { 
       month = 9; 
       year = 2016; 
      }; 
      title = "Staff"; 
     } 
    ); 
}, "firstName": Joe] 

が、私は以下のコードを使用しています

func linkedInLogin(){ 

     LISDKSessionManager.createSession(withAuth: [LISDK_BASIC_PROFILE_PERMISSION, LISDK_EMAILADDRESS_PERMISSION], state: nil, showGoToAppStoreDialog: true, successBlock: { (returnState) -> Void in 
      print("success called!") 
      let session = LISDKSessionManager.sharedInstance().session 
      //let url = "https://api.linkedin.com/v1/people/~" 

      let url = "https://api.linkedin.com/v1/people/~:(id,summary,positions,email-address,first-name,last-name,public-profile-url,formatted-name,picture-url,picture-urls::(original))?format=json" 

      if LISDKSessionManager.hasValidSession() { 
       LISDKAPIHelper.sharedInstance().getRequest(url, success: { (response) -> Void in 
        // print(response!.data!) 


        let str = response!.data! 

        let dict = self.convertToDictionary(text: str) 




        print(dict!) 

        let firstName : String? = dict!["firstName"] as! String? 
        let lastName : NSString? = dict?["lastName"] as? NSString 
        let email : NSString? = dict?["emailAddress"] as? NSString 
        let userName : NSString? = dict?["formattedName"] as? NSString 
        let linkedInID : NSString? = dict?["id"] as? NSString 
        let link : NSString? = dict?["publicProfileUrl"] as? NSString 
        let liid : NSString? = dict?["id"] as? NSString 
        let picurl : NSString? = dict?["pictureUrl"] as? NSString 
        // let summary : NSString? = dict?["summary"] as? NSString 
        let positions : NSString? = dict?["positions"] as? NSString 


        var companyString:String! 
        // let type = (self.data[indexPath.row] as? [String : String])?["Type"] 
        if let company = (dict?["company"] as? [String : String])?["name"]{ 
         companyString = company 
        } 


        print("FIRSTNAME: \(firstName!)") 
        print("LASTNAME: \(lastName!)") 
        if email != nil {print("email: \(email!)")} 
        print("userName: \(userName!)") 
        print("linkedinid: \(linkedInID!)") 
        print("Link: \(link!)") 
        print("Liid: \(liid!)") 
        print("pic url: \(picurl!)") 
        // print("summary: \(summary!)") 
        print("positions: \(positions!)") 
        print("Company: \(companyString!)") 


       }, error: { (error) -> Void in 
        print(error!) 
       }) 
      } 

     }) { (error) -> Void in 
      print("Error: \(error)") 
     } 

    } 


    func convertToDictionary(text: String) -> [String: Any]? { 
     if let data = text.data(using: .utf8) { 
      do { 
       return try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] 
      } catch { 
       print(error.localizedDescription) 
      } 
     } 
     return nil 
    } 
+1

純粋な*** Swift *** 'String'ではなく、なぜ' Foundation'型(すなわち 'NSString')を使用するのですか?なぜ、3行を'? '目的なしでも? 'Nil-Coalescing Operator'セクションの[Basic Operators](https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html)を見てください。そして、[こちら](https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/BuildingCocoaApps/WorkingWithCocoaDataTypes.html)が役立ちます。たぶんこれらは、私が何を意味するのか理解するのに役立ちます。 –

答えて

0

idInt

if let dict = self.convertToDictionary(text: str) { 
... 

    if let company = dict["company"] as? [String : Any], 
    let companyName = company["name"] as? String { 
     print(companyName) 
    } 
... 
} 

サイドノートであるため、companyの値は[String:Any]次のとおりです。

  • は、コンパイラが推測できる型に注釈を付けないでください。
  • SwiftでNSStringを使用しないでください。
  • 感嘆符や疑問符が多すぎます。オプションのバインディングを使用すると、安全にアンラップされた非オプション型を安全に取得できます。
関連する問題