Optional requirements
You see that when you list your properties and methods in a protocol, the type that conforms to that protocol should adopt to all properties and methods. Skipping one of them will lead to a compiler error. Some protocols may contain methods or properties that are not necessary to implement, especially with delegates. Some delegate methods are meant to notify you something that you don't care about. In that case, you can mark these methods as optional. The keyword optional can be added before properties and methods to mark them as optional. Another thing, the protocol that has optional stuff should be marked with @Objc. Take a look at the following example:
@objc protocol DownloadManagerDelegate { func didDownloadFile(fileURL: String, fileData: NSData) optional func didFailToDownloadFile(fileURL: String, error: NSError) }
It's the new version of DownloadManagerDelegate, which marks didFailToDownloadFile method as optional.