エラーメッセージ
- Swift1.2 → 2.0にしたところ、以下の文法エラーが出るようになりました
Cannot invoke 'sendData' with an argument list of type '(NSData?, toPeers: [MCPeerID], withMode: MCSessionSendDataMode, error: inout NSError?)'
原因
- 公式ドキュメントのAPI Diffを確認
- Swift1.2 → Swift2.0でMultipeerConnectivityのsendDataメソッドのAPIが変更になりました
- 4つ目の引数の error がなくなって、throws がついています
MCSession.h(swift1.2)
func sendData(_ data: NSData!, toPeers peerIDs: [AnyObject]!, withMode mode: MCSessionSendDataMode, error error: NSErrorPointer) -> Bool
MCSession.h(swift2.0)
func sendData(_ data: NSData, toPeers peerIDs: [MCPeerID], withMode mode: MCSessionSendDataMode) throws
対処法
- APIを引数3つへ変更します。throwsに対応して、以下のように
do~try~catch
を実装します
Swift1.2
swift1.2.swift
self.session.sendData(msg, toPeers: self.session.connectedPeers,
withMode: MCSessionSendDataMode.Unreliable, error: &error)
Swift2.0
swift2.0.swift
do {
try self.session.sendData(msg!,
toPeers: self.session.connectedPeers,
withMode: MCSessionSendDataMode.Unreliable)
} catch {
// do something.
}
- Objective-CのAPI変更では、非推奨期間があったりメソッドの宣言に飛べば「iOS7から変更になったよ」等コメントされていたと思うのですが、Swiftは変更が多いためそういったフォローがなくエラーメッセージが少し分かりにくいですね