2015-03-25 79 views
0

我正在为我的应用程序创建一个API密钥plist,并且试图找出如何创建一个函数,将这些plist值存储在可用于其他文件的变量中。我ApiKeys.plist看起来是这样的:Swift - 使用创建的plist

根 - 词典 - (空白)

  • Parse_App_Id - 字符串 - XXXXXXX
  • Parse_Client_Id - 字符串 - XXXXXX

然后,我有一个​​文件,其中我功能存储:

import Foundation 

func valueForAPIKey(#keyname:String) -> String { 

    let filePath = NSBundle.mainBundle().pathForResource("ApiKeys", ofType: "plist") 

    let plist = NSDictionary(contentsOfFile: filePath!) 

    let parseAppId:String = plist?.objectForKey("Parse_App_Id") as String 
    let parseClientId:String = plist?.objectForKey("Parse_Client_Id") as String 


    return parseAppId && parseClientID 

} 

附注:我使用了一个教程来构建这个函数,我很好奇这是否是设置一个函数来存储两个plist键的最好方法。

第一个错误出现在return行。不能调用类型的&&参数列表 '(字符串,字符串)'

AppDelegate.swift:

import UIKit 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
     // Override point for customization after application launch. 


      Parse.setApplicationId(valueForAPIKey.(keyname: "ParseAppId")), clientKey: valueForAPIKey.(keyname:"ParseClientId")) 
      PFFacebookUtils.initializeFacebook() 

     return true 
    } 

第二个错误:预计 '' 在valueForAPIKey分离。 (键名:“ParseAppID”)

我很新的概念plist所以请原谅我的错误,明确和误导

回答

1

有一些混乱,我认为,不仅与事的plist。

首先,您的方法期望返回一个字符串。

无论你的回报你的结果作为一个String:

func valueForAPIKey(#keyname:String) -> String { 
    let filePath = NSBundle.mainBundle().pathForResource("ApiKeys", ofType: "plist") 

    let plist = NSDictionary(contentsOfFile: filePath!) 

    let parseAppId:String = plist?.objectForKey("Parse_App_Id") as String 
    let parseClientId:String = plist?.objectForKey("Parse_Client_Id") as String 

    return "\(parseAppId) \(parseClientID)" 
} 

或者你选择返回一个元组(或阵列),你会访问取决于你需要哪一个0或1的元素。

func valueForAPIKey(#keyname:String) -> (String, String) { 
    let filePath = NSBundle.mainBundle().pathForResource("ApiKeys", ofType: "plist") 

    let plist = NSDictionary(contentsOfFile: filePath!) 

    let parseAppId:String = plist?.objectForKey("Parse_App_Id") as String 
    let parseClientId:String = plist?.objectForKey("Parse_Client_Id") as String 

    return (parseAppId, parseClientID) 
} 

然而,由于您使用的是参数keyname,你为什么不使用它呢?

func valueForAPIKey(#keyname:String) -> String { 
    let filePath = NSBundle.mainBundle().pathForResource("ApiKeys", ofType: "plist") 

    let plist = NSDictionary(contentsOfFile: filePath!) 

    let id : String = plist?.objectForKey(keyname) as String 

    return id 
} 

然后你就可以使用它,像这样:

Parse.setApplicationId(valueForAPIKey("Parse_App_Id"), clientKey : valueForAPIKey("Parse_Client_Id")) 
+0

这工作!谢谢@lchamp – cphill 2015-03-26 01:37:24