| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 | ////  Placeholder.swift//  Kingfisher////  Created by Tieme van Veen on 28/08/2017.////  Copyright (c) 2019 Wei Wang <onevcat@gmail.com>////  Permission is hereby granted, free of charge, to any person obtaining a copy//  of this software and associated documentation files (the "Software"), to deal//  in the Software without restriction, including without limitation the rights//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell//  copies of the Software, and to permit persons to whom the Software is//  furnished to do so, subject to the following conditions:////  The above copyright notice and this permission notice shall be included in//  all copies or substantial portions of the Software.////  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN//  THE SOFTWARE.#if !os(watchOS)#if os(macOS)import AppKit#elseimport UIKit#endif/// Represents a placeholder type which could be set while loading as well as/// loading finished without getting an image.public protocol Placeholder {        /// How the placeholder should be added to a given image view.    func add(to imageView: KFCrossPlatformImageView)        /// How the placeholder should be removed from a given image view.    func remove(from imageView: KFCrossPlatformImageView)}/// Default implementation of an image placeholder. The image will be set or/// reset directly for `image` property of the image view.extension KFCrossPlatformImage: Placeholder {    /// How the placeholder should be added to a given image view.    public func add(to imageView: KFCrossPlatformImageView) { imageView.image = self }    /// How the placeholder should be removed from a given image view.    public func remove(from imageView: KFCrossPlatformImageView) { imageView.image = nil }}/// Default implementation of an arbitrary view as placeholder. The view will be /// added as a subview when adding and be removed from its super view when removing.////// To use your customize View type as placeholder, simply let it conforming to /// `Placeholder` by `extension MyView: Placeholder {}`.extension Placeholder where Self: KFCrossPlatformView {        /// How the placeholder should be added to a given image view.    public func add(to imageView: KFCrossPlatformImageView) {        imageView.addSubview(self)        translatesAutoresizingMaskIntoConstraints = false        centerXAnchor.constraint(equalTo: imageView.centerXAnchor).isActive = true        centerYAnchor.constraint(equalTo: imageView.centerYAnchor).isActive = true        heightAnchor.constraint(equalTo: imageView.heightAnchor).isActive = true        widthAnchor.constraint(equalTo: imageView.widthAnchor).isActive = true    }    /// How the placeholder should be removed from a given image view.    public func remove(from imageView: KFCrossPlatformImageView) {        removeFromSuperview()    }}#endif
 |