我正在为我的应用程序创建一个API Keys plist,我试图弄清楚如何创建一个函数,将这些plist值存储在可以在我的其他文件中使用的变量中。我的ApiKeys.plist
看起来像这样:
Root - Dictionary - (空白)
然后我有一个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
行。无法调用类型'(字符串,字符串)'
&&
参数列表
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
概念很陌生,请原谅我的明确错误和误导
答案 0 :(得分:1)
我认为存在一些混乱,不仅仅是因为这个问题。
首先,您的方法希望返回一个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"))