swiftでのAPI実装について
swiftにてGracenoteのAPI実装をやっているのですがエラーになってしまいうまく起動することができません。
知識が浅いため一人で解決することができずこちらに質問させていただきました。どう改善すればいいのでしょうか、お力貸していただけると幸いです。
以下がコードです。
具体的には「//requestを送信」の部分が
Cannot convert value of type '(NSURLResponse!, data: NSData!, error:
NSError!) -> ()' to expected argument type '(NSURLResponse?, NSData?,
NSError?) -> Void'
とエラー表示されてしまい、
「//取得したXMLをエレメント毎に取得」の部分が
Objective-C method
'parser:didStartElement:namespaceURI:qualifiedName:attributes:'
provided by method
'parser(:didStartElement:namespaceURI:qualifiedName:attributes:)'
conflicts with optional requirement method
'parser(:didStartElement:namespaceURI:qualifiedName:attributes:)' in
protocol 'NSXMLParserDelegate'
とエラー表示されてしまいます。
「XXXXXXXXXXX」の部分にはクライアントIDやユーザーIDが入ります。
よろしくお願いいたします。
import UIKit
class ViewController: UIViewController ,NSXMLParserDelegate{
override func viewDidLoad() {
super.viewDidLoad()
//XML
let str = "<QUERIES><AUTH><CLIENT>XXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</CLIENT><USER>XXXXXXXXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</USER></AUTH><QUERY CMD='ALBUM_SEARCH'><MODE>SINGLE_BEST_COVER</MODE><TEXT TYPE='ARTIST'>perfume</TEXT><TEXT TYPE='ALBUM_TITLE'>GAME</TEXT><TEXT TYPE='TRACK_TITLE'>チョコレイト・ディスコ</TEXT><OPTION><PARAMETER>SELECT_EXTENDED</PARAMETER><VALUE>COVER,REVIEW,ARTIST_BIOGRAPHY,ARTIST_IMAGE,ARTIST_OET,MOOD,TEMPO</VALUE></OPTION><OPTION><PARAMETER>SELECT_DETAIL</PARAMETER><VALUE>GENRE:3LEVEL,MOOD:2LEVEL,TEMPO:3LEVEL,ARTIST_ORIGIN:4LEVEL,ARTIST_ERA:2LEVEL,ARTIST_TYPE:2LEVEL</VALUE></OPTION></QUERY></QUERIES>"
//UTF-8にエンコード
let xmlData = str.dataUsingEncoding(NSUTF8StringEncoding)
//URLの指定
var url: NSURL! = NSURL(string: "https://c9767936.web.cddbp.net/webapi/xml/1.0/")
var request = NSMutableURLRequest(URL: url)
//XMLヘッダーの指定
request.setValue("application/xml", forHTTPHeaderField: "Content-type")
//POSTを指定
request.HTTPMethod = "POST"
//Dataをセット
request.HTTPBody = xmlData
//requestを送信
NSURLConnection.sendAsynchronousRequest(request,queue: NSOperationQueue.mainQueue(),completionHandler: response)
}
//返ってきたAPIのデータを取得
func response(res: NSURLResponse!, data: NSData!, error: NSError!){
//XMLに変換
let parser : NSXMLParser? = NSXMLParser(data: data)
if parser != nil {
parser!.delegate = self
parser!.parse()
} else {
// パースに失敗した時
print("failed to parse XML")
}
}
//取得したXMLをエレメント毎に取得
func parser(parser: NSXMLParser,didStartElement elementName: String,namespaceURI: String?,qualifiedName: String?,attributes attributeDict: [NSObject : AnyObject])
{
print(elementName)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}