Ios 将字符串转换为plist-swift

Ios 将字符串转换为plist-swift,ios,swift,nsdictionary,plist,Ios,Swift,Nsdictionary,Plist,看起来我可能是唯一一个尝试这样做的人,或者这很容易,除了我以外的每个人都知道怎么做 网站请求返回plist响应,响应作为字符串接收。那么,如何将plist“string”输入字典 let url = NSURL(string: "http://...") let cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData var request = NSMutableURLRequest(URL: url!, cacheP

看起来我可能是唯一一个尝试这样做的人,或者这很容易,除了我以外的每个人都知道怎么做

网站请求返回plist响应,响应作为字符串接收。那么,如何将plist“string”输入字典

let url = NSURL(string: "http://...")
let cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData
var request = NSMutableURLRequest(URL: url!, cachePolicy: cachePolicy, timeoutInterval: 2.0)
request.HTTPMethod = "POST"

let boundaryConstant = "----------V2ymHFg03esomerasdfsalfkjlksjdfy"
let contentType = "mulutipart/form-data; boundary=" + boundaryConstant
NSURLProtocol.setProperty(contentType, forKey: "Content-Type", inRequest: request)
var dataString = ""
let requestBodyData = (dataString as NSString).dataUsingEncoding(NSUTF8StringEncoding)
request.HTTPBody = requestBodyData

var response: NSURLResponse? = nil
var error: NSError? = nil
let reply = NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: &error)

let results = NSString(data: reply!, encoding: NSUTF8StringEncoding)
结果是一个plist字符串,带有xml头和遵循plist结构的数据。如果我使用

NSDictionary(contentsOfURL: NSURL(string: path)!)!
然而,我正在发布,而不是“获取”,所以据我所知,我不能使用NSURL路径


提前谢谢

NSPropertyListSerialization
是您在这里的朋友,只要您真正获取plist数据:

if let plistData = results.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true) {
    var format = NSPropertyListFormat.XMLFormat_v1_0
    let options = NSPropertyListMutabilityOptions.Immutable
    if let dict = NSPropertyListSerialization.propertyListWithData(plistData, 
                                      options: NSPropertyListReadOptions(options.rawValue),
                                       format: &format, 
                                        error: nil) as? NSDictionary {
        println(dict)
    }
}

NSPropertyListSerialization
是您在这里的朋友,只要您真正获取plist数据:

if let plistData = results.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true) {
    var format = NSPropertyListFormat.XMLFormat_v1_0
    let options = NSPropertyListMutabilityOptions.Immutable
    if let dict = NSPropertyListSerialization.propertyListWithData(plistData, 
                                      options: NSPropertyListReadOptions(options.rawValue),
                                       format: &format, 
                                        error: nil) as? NSDictionary {
        println(dict)
    }
}

Swift 5

if let plistData = results(using: String.Encoding.utf8, allowLossyConversion: true) {
    var format = PropertyListSerialization.PropertyListFormat.xml
    let options = PropertyListSerialization.MutabilityOptions.mutableContainers
    if let dict = try PropertyListSerialization.propertyList(from: plistData,
                                                          options: PropertyListSerialization.ReadOptions(rawValue: options.rawValue),
                                                   format: &format) as NSDictionary {
        print(dict)
    }
}

Swift 5

if let plistData = results(using: String.Encoding.utf8, allowLossyConversion: true) {
    var format = PropertyListSerialization.PropertyListFormat.xml
    let options = PropertyListSerialization.MutabilityOptions.mutableContainers
    if let dict = try PropertyListSerialization.propertyList(from: plistData,
                                                          options: PropertyListSerialization.ReadOptions(rawValue: options.rawValue),
                                                   format: &format) as NSDictionary {
        print(dict)
    }
}

由于plist是XML,您可以尝试使用NSXMLParser从中构建数据结构。或者是libxml或许多第三方Obj-cxml解析器。由于plist是XML,您可以尝试使用NSXMLParser从中构建数据结构。或者libxml或许多第三方Obj-C XML解析器。我得到一个错误“NpropertyListFormat”不能转换为“@lvalue inout$t7”我得到一个错误“NpropertyListFormat”不能转换为“@lvalue inout$t7”在代码中添加一些注释以便更好地理解在代码中添加一些注释以便更好地理解