Swift - 使用创建的 plist

Swift - Using created plist

我正在为我的应用程序创建一个 API Keys plist,我正在尝试弄清楚如何创建一个函数,将这些 plist 值存储在可以在我的其他文件中使用的变量中。我的 ApiKeys.plist 看起来像这样:

根 - 字典 -(空白)

然后我有一个 ApiKeys.swift 文件,其中存储了我的函数:

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 行。无法调用 && 类型为“(String, String)”的参数列表

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 处需要 ',' 分隔符。(keyname: "ParseAppID")

我对 plist 概念很陌生,所以请原谅我明显的错误和误导

我觉得有些混乱,不仅仅是 plist 的问题。

首先,您的方法需要 return 一个字符串。

您的 return 您的结果作为单个字符串 :

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)"
}

或者您选择 return 元组(或数组),您将根据需要访问元素 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"))