Using protocols in Swift helps organize code and define clear contracts for functionality. Protocols themselves have minimal runtime cost. However, when using protocol types with dynamic dispatch (like AnyObject or protocol existential types), there can be a slight overhead compared to direct class or struct calls. This overhead is usually negligible and does not affect frame rates significantly.
Protocols promote code reuse and cleaner architecture, which can indirectly improve app performance by making code easier to maintain and optimize.