代码之家  ›  专栏  ›  技术社区  ›  Adem

如何使用数组简化此代码?(代码重用)

  •  0
  • Adem  · 技术社区  · 6 年前

    我写了一个类,它接收来自firebase的图像和声音。到目前为止,代码工作得很好,但是我有一个大类,如果我想包含很多内容,我需要它变得更简单。

    我需要创建可重用代码或数组的帮助,例如,我可以用一个数字来标记uiimageview,而不是用十几个outlet和复制/粘贴代码来提供相同的功能。这是我的代码:

    import UIKit
    import Firebase
    import AVKit
    import FirebaseDatabase
    import SwiftyJSON
    import FirebaseRemoteConfig
    class CommunityConfiguration0 {
        let Firestring_image1 = NSLocalizedString("Firestring_image1", comment: "")
        let Firestring_image2 = NSLocalizedString("Firestring_image2", comment: "")
        let Firestring_image3 = NSLocalizedString("Firestring_image3", comment: "")
        let Firestring_image4 = NSLocalizedString("Firestring_image4", comment: "")
        let Firestring_image5 = NSLocalizedString("Firestring_image5", comment: "")
        let Firestring_image6 = NSLocalizedString("Firestring_image6", comment: "")
        let Firestring_image7 = NSLocalizedString("Firestring_image7", comment: "")
        let Firestring_image8 = NSLocalizedString("Firestring_image8", comment: "")
        let Firestring_image9 = NSLocalizedString("Firestring_image9", comment: "")
        let Firestring_image10 = NSLocalizedString("Firestring_image10", comment: "")
        let Firestring_image11 = NSLocalizedString("Firestring_image11", comment: "")
        let Firestring_image12 = NSLocalizedString("Firestring_image12", comment: "")
        
        var loadingURL: URL?
        var loadingURL2: URL?
        var loadingURL3: URL?
        var loadingURL4: URL?
        
        var image1URL: URL?
        var image2URL: URL?
        var image3URL: URL?
        var image4URL: URL?
        var image5URL: URL?
        var image6URL: URL?
        var image7URL: URL?
        var image8URL: URL?
        var image9URL: URL?
        var image10URL: URL?
        var image11URL: URL?
        var image12URL: URL?
        
        var sound1URL: URL?
        var sound2URL: URL?
        var sound3URL: URL?
        var sound4URL: URL?
        var sound5URL: URL?
        var sound6URL: URL?
        var sound7URL: URL?
        var sound8URL: URL?
        var sound9URL: URL?
        var sound10URL: URL?
        var sound11URL: URL?
        var sound12URL: URL?
    
        init(snapshot: DataSnapshot) {
            if let dict = snapshot.value as? [String: Any] {
                let json = JSON(dict)
                image1URL = URL(string: json[Firestring_image1].stringValue)
                image2URL = URL(string: json[Firestring_image2].stringValue)
                image3URL = URL(string: json[Firestring_image3].stringValue)
                image4URL = URL(string: json[Firestring_image4].stringValue)
                image5URL = URL(string: json[Firestring_image5].stringValue)
                image6URL = URL(string: json[Firestring_image6].stringValue)
                image7URL = URL(string: json[Firestring_image7].stringValue)
                image8URL = URL(string: json[Firestring_image8].stringValue)
                image9URL = URL(string: json[Firestring_image9].stringValue)
                image10URL = URL(string: json[Firestring_image10].stringValue)
                image11URL = URL(string: json[Firestring_image11].stringValue)
                image12URL = URL(string: json[Firestring_image12].stringValue)
            }
        }
    }
    class FirebaseViewController0: UIViewController, AVAudioPlayerDelegate, GKGameCenterControllerDelegate, UIGestureRecognizerDelegate, UIScrollViewDelegate {
        var player: AVPlayer!
        var configuration: CommunityConfiguration?
    
        var firesound1 = AVPlayer()
        var firesound2 = AVPlayer()
        var firesound3 = AVPlayer()
        var firesound4 = AVPlayer()
        var firesound5 = AVPlayer()
        var firesound6 = AVPlayer()
        var firesound7 = AVPlayer()
        var firesound8 = AVPlayer()
        var firesound9 = AVPlayer()
        var firesound10 = AVPlayer()
        var firesound11 = AVPlayer()
        var firesound12 = AVPlayer()
        
        @IBOutlet weak var firelabel1: UIButton?
        @IBOutlet weak var firelabel2: UIButton?
        @IBOutlet weak var firelabel3: UIButton?
        @IBOutlet weak var firelabel4: UIButton?
        @IBOutlet weak var firelabel5: UIButton?
        @IBOutlet weak var firelabel6: UIButton?
        @IBOutlet weak var firelabel7: UIButton?
        @IBOutlet weak var firelabel8: UIButton?
        @IBOutlet weak var firelabel9: UIButton?
        @IBOutlet weak var firelabel10: UIButton?
        @IBOutlet weak var firelabel11: UIButton?
        @IBOutlet weak var firelabel12: UIButton?
        
        @IBOutlet weak var fireimage1: UIImageView!
        @IBOutlet weak var fireimage2: UIImageView!
        @IBOutlet weak var fireimage3: UIImageView!
        @IBOutlet weak var fireimage4: UIImageView!
        @IBOutlet weak var fireimage5: UIImageView!
        @IBOutlet weak var fireimage6: UIImageView!
        @IBOutlet weak var fireimage7: UIImageView!
        @IBOutlet weak var fireimage8: UIImageView!
        @IBOutlet weak var fireimage9: UIImageView!
        @IBOutlet weak var fireimage10: UIImageView!
        @IBOutlet weak var fireimage11: UIImageView!
        @IBOutlet weak var fireimage12: UIImageView!
        
        var configurationHandle: DatabaseHandle?
        var configurationReference: DatabaseReference?
    //    let PlayAgainObserver = NotificationCenter.default
    //    let notification = NotificationCenter.default
    //    let ncObserver = NotificationCenter.default
    //    let FirebaseObserver = NotificationCenter.default
    
        let Firestring_text1 = NSLocalizedString("Firestring_text1", comment: "")
        let Firestring_text2 = NSLocalizedString("Firestring_text2", comment: "")
        let Firestring_text3 = NSLocalizedString("Firestring_text3", comment: "")
        let Firestring_text4 = NSLocalizedString("Firestring_text4", comment: "")
        let Firestring_text5 = NSLocalizedString("Firestring_text5", comment: "")
        let Firestring_text6 = NSLocalizedString("Firestring_text6", comment: "")
        let Firestring_text7 = NSLocalizedString("Firestring_text7", comment: "")
        let Firestring_text8 = NSLocalizedString("Firestring_text8", comment: "")
        let Firestring_text9 = NSLocalizedString("Firestring_text9", comment: "")
        let Firestring_text10 = NSLocalizedString("Firestring_text10", comment: "")
        let Firestring_text11 = NSLocalizedString("Firestring_text11", comment: "")
        let Firestring_text12 = NSLocalizedString("Firestring_text12", comment: "")
        
        func updateViewWithRCValues() {
            let buttonLabel1 = RemoteConfig.remoteConfig().configValue(forKey: Firestring_text1).stringValue ?? ""
            firelabel1?.setTitle(buttonLabel1, for: .normal)
            let buttonLabel2 = RemoteConfig.remoteConfig().configValue(forKey: Firestring_text2).stringValue ?? ""
            firelabel2?.setTitle(buttonLabel2, for: .normal)
            let buttonLabel3 = RemoteConfig.remoteConfig().configValue(forKey: Firestring_text3).stringValue ?? ""
            firelabel3?.setTitle(buttonLabel3, for: .normal)
            let buttonLabel4 = RemoteConfig.remoteConfig().configValue(forKey: Firestring_text4).stringValue ?? ""
            firelabel4?.setTitle(buttonLabel4, for: .normal)
            let buttonLabel5 = RemoteConfig.remoteConfig().configValue(forKey: Firestring_text5).stringValue ?? ""
            firelabel5?.setTitle(buttonLabel5, for: .normal)
            let buttonLabel6 = RemoteConfig.remoteConfig().configValue(forKey: Firestring_text6).stringValue ?? ""
            firelabel6?.setTitle(buttonLabel6, for: .normal)
            let buttonLabel7 = RemoteConfig.remoteConfig().configValue(forKey: Firestring_text7).stringValue ?? ""
            firelabel7?.setTitle(buttonLabel7, for: .normal)
            let buttonLabel8 = RemoteConfig.remoteConfig().configValue(forKey: Firestring_text8).stringValue ?? ""
            firelabel8?.setTitle(buttonLabel8, for: .normal)
            let buttonLabel9 = RemoteConfig.remoteConfig().configValue(forKey: Firestring_text9).stringValue ?? ""
            firelabel9?.setTitle(buttonLabel9, for: .normal)
            let buttonLabel10 = RemoteConfig.remoteConfig().configValue(forKey: Firestring_text10).stringValue ?? ""
            firelabel10?.setTitle(buttonLabel10, for: .normal)
            let buttonLabel11 = RemoteConfig.remoteConfig().configValue(forKey: Firestring_text11).stringValue ?? ""
            firelabel11?.setTitle(buttonLabel11, for: .normal)
            let buttonLabel12 = RemoteConfig.remoteConfig().configValue(forKey: Firestring_text12).stringValue ?? ""
            firelabel12?.setTitle(buttonLabel12, for: .normal)
        }
        
        func setupRemoteConfigDefaults() {
            let defaultValues = [
                "label1": "" as NSObject,
                "label2": "" as NSObject,
                "label3": "" as NSObject,
                "label4": "" as NSObject,
                "label5": "" as NSObject,
                "label6": "" as NSObject,
                "label7": "" as NSObject,
                "label8": "" as NSObject,
                "label9": "" as NSObject,
                "label10": "" as NSObject,
                "label11": "" as NSObject,
                "label12": "" as NSObject
            ]
            RemoteConfig.remoteConfig().setDefaults(defaultValues)
        }
        func fetchRemoteConfig() {
            // Remove this before production!!
            let debugSettings = RemoteConfigSettings(developerModeEnabled: true)
            RemoteConfig.remoteConfig().configSettings = debugSettings
            RemoteConfig.remoteConfig().fetch(withExpirationDuration: 0) { [unowned self] (status, error) in guard error == nil else {
                print ("Error fetching remote values: \(String(describing: error))")
                return
                }
                print("Retrieved values from the cloud")
                RemoteConfig.remoteConfig().activateFetched()
                self.updateViewWithRCValues()
            }
        }
        @objc func stopObserving() {
            if let configurationHandle = configurationHandle {
                configurationReference?.removeObserver(withHandle: configurationHandle)
            }
        }
        @objc func startObserving() {
            stopObserving()
          configurationReference = Database.database(url: "https://mlg-soundboard-2018-edition.firebaseio.com").reference().child("screens").child("us").child("community")
            configurationHandle = configurationReference?.observe(.value, with: { [weak self] (snapshot) in
                DispatchQueue.main.async {
                    self?.configuration = CommunityConfiguration(snapshot: snapshot)
                    if let url = self?.configuration?.image1URL {
                        self?.fireimage1?.hnk_setImage(from: url)
                    }}
                DispatchQueue.main.async {
                    self?.configuration = CommunityConfiguration(snapshot: snapshot)
                    if let url = self?.configuration?.image2URL {
                        self?.fireimage2?.hnk_setImage(from: url)
                    }
                }
                DispatchQueue.main.async {
                    self?.configuration = CommunityConfiguration(snapshot: snapshot)
                    if let url = self?.configuration?.image3URL {
                        self?.fireimage3?.hnk_setImage(from: url)
                    }
                }
                DispatchQueue.main.async {
                    self?.configuration = CommunityConfiguration(snapshot: snapshot)
                    if let url = self?.configuration?.image4URL {
                        self?.fireimage4?.hnk_setImage(from: url)
                    }
                }
                DispatchQueue.main.async {
                    self?.configuration = CommunityConfiguration(snapshot: snapshot)
                    if let url = self?.configuration?.image5URL {
                        self?.fireimage5?.hnk_setImage(from: url)
                    }}
                DispatchQueue.main.async {
                    self?.configuration = CommunityConfiguration(snapshot: snapshot)
                    if let url = self?.configuration?.image6URL {
                        self?.fireimage6?.hnk_setImage(from: url)
                    }}
                DispatchQueue.main.async {
                    self?.configuration = CommunityConfiguration(snapshot: snapshot)
                    if let url = self?.configuration?.image7URL {
                        self?.fireimage7?.hnk_setImage(from: url)
                    }}
                DispatchQueue.main.async {
                    self?.configuration = CommunityConfiguration(snapshot: snapshot)
                    if let url = self?.configuration?.image8URL {
                        self?.fireimage8?.hnk_setImage(from: url)
                    }}
                DispatchQueue.main.async {
                    self?.configuration = CommunityConfiguration(snapshot: snapshot)
                    if let url = self?.configuration?.image9URL {
                        self?.fireimage9?.hnk_setImage(from: url)
                    }}
                DispatchQueue.main.async {
                    self?.configuration = CommunityConfiguration(snapshot: snapshot)
                    if let url = self?.configuration?.image10URL {
                        self?.fireimage10?.hnk_setImage(from: url)
                    }}
                DispatchQueue.main.async {
                    self?.configuration = CommunityConfiguration(snapshot: snapshot)
                    if let url = self?.configuration?.image11URL {
                        self?.fireimage11?.hnk_setImage(from: url)
                    }}
                DispatchQueue.main.async {
                    self?.configuration = CommunityConfiguration(snapshot: snapshot)
                    if let url = self?.configuration?.image12URL {
                        self?.fireimage12?.hnk_setImage(from: url)
                    }}
            })
        }
        override func viewDidLoad() {
            super.viewDidLoad()
            setupRemoteConfigDefaults()
            fetchRemoteConfig()
            startObserving()
        }
        deinit {
            stopObserving()
        }
    
        @IBAction func soundpressed1(_ sender: Any) {
            if UserDefaults.standard.bool(forKey: "SoundKeyOnline") == true {
                guard let url = configuration?.sound1URL else { return }
                let playerItem = CachingPlayerItem(url: url)
                firesound1 = AVPlayer(playerItem: playerItem)
                firesound1.automaticallyWaitsToMinimizeStalling = false
                playerItem.download()
                firesound1.play()
            }
            else if UserDefaults.standard.bool(forKey: "SoundKeyOnline") == false {
                stopSounds()
                guard let url = configuration?.sound1URL else { return }
                let playerItem = CachingPlayerItem(url: url)
                firesound1 = AVPlayer(playerItem: playerItem)
                firesound1.automaticallyWaitsToMinimizeStalling = false
                playerItem.download()
                firesound1.play()
            }
    }
        @IBAction func soundpressed2(_ sender: Any) {
            if UserDefaults.standard.bool(forKey: "SoundKeyOnline") == true {
                guard let url = configuration?.sound2URL else { return }
                let playerItem = CachingPlayerItem(url: url)
                firesound2 = AVPlayer(playerItem: playerItem)
                firesound2.automaticallyWaitsToMinimizeStalling = false
                playerItem.download()
                firesound2.play()
            }
            else if UserDefaults.standard.bool(forKey: "SoundKeyOnline") == false {
                stopSounds()
                guard let url = configuration?.sound2URL else { return }
                let playerItem = CachingPlayerItem(url: url)
                firesound2 = AVPlayer(playerItem: playerItem)
                firesound2.automaticallyWaitsToMinimizeStalling = false
                playerItem.download()
                firesound2.play()
            }
        }
        @IBAction func soundpressed3(_ sender: Any) {
            if UserDefaults.standard.bool(forKey: "SoundKeyOnline") == true {
                guard let url = configuration?.sound3URL else { return }
                let playerItem = CachingPlayerItem(url: url)
                firesound3 = AVPlayer(playerItem: playerItem)
                firesound3.automaticallyWaitsToMinimizeStalling = false
                playerItem.download()
                firesound3.play()
            }
            else if UserDefaults.standard.bool(forKey: "SoundKeyOnline") == false {
                stopSounds()
                guard let url = configuration?.sound3URL else { return }
                let playerItem = CachingPlayerItem(url: url)
                firesound3 = AVPlayer(playerItem: playerItem)
                firesound3.automaticallyWaitsToMinimizeStalling = false
                playerItem.download()
                firesound3.play()
            }
        }
        @IBAction func soundpressed4(_ sender: Any) {
            if UserDefaults.standard.bool(forKey: "SoundKeyOnline") == true {
                guard let url = configuration?.sound4URL else { return }
                let playerItem = CachingPlayerItem(url: url)
                firesound4 = AVPlayer(playerItem: playerItem)
                firesound4.automaticallyWaitsToMinimizeStalling = false
                playerItem.download()
                firesound4.play()
            }
            else if UserDefaults.standard.bool(forKey: "SoundKeyOnline") == false {
                stopSounds()
                guard let url = configuration?.sound4URL else { return }
                let playerItem = CachingPlayerItem(url: url)
                firesound4 = AVPlayer(playerItem: playerItem)
                firesound4.automaticallyWaitsToMinimizeStalling = false
                playerItem.download()
                firesound4.play()
            }
        }
        @IBAction func soundpressed5(_ sender: Any) {
            if UserDefaults.standard.bool(forKey: "SoundKeyOnline") == true {
                guard let url = configuration?.sound5URL else { return }
                let playerItem = CachingPlayerItem(url: url)
                firesound5 = AVPlayer(playerItem: playerItem)
                firesound5.automaticallyWaitsToMinimizeStalling = false
                playerItem.download()
                firesound5.play()
            }
            else if UserDefaults.standard.bool(forKey: "SoundKeyOnline") == false {
                stopSounds()
                guard let url = configuration?.sound5URL else { return }
                let playerItem = CachingPlayerItem(url: url)
                firesound5 = AVPlayer(playerItem: playerItem)
                firesound5.automaticallyWaitsToMinimizeStalling = false
                playerItem.download()
                firesound5.play()
            }
        }
        @IBAction func soundpressed6(_ sender: Any) {
            if UserDefaults.standard.bool(forKey: "SoundKeyOnline") == true {
                guard let url = configuration?.sound6URL else { return }
                let playerItem = CachingPlayerItem(url: url)
                firesound6 = AVPlayer(playerItem: playerItem)
                firesound6.automaticallyWaitsToMinimizeStalling = false
                playerItem.download()
                firesound6.play()
            }
            else if UserDefaults.standard.bool(forKey: "SoundKeyOnline") == false {
                stopSounds()
                guard let url = configuration?.sound6URL else { return }
                let playerItem = CachingPlayerItem(url: url)
                firesound6 = AVPlayer(playerItem: playerItem)
                firesound6.automaticallyWaitsToMinimizeStalling = false
                playerItem.download()
                firesound6.play()
            }
        }
        @IBAction func soundpressed7(_ sender: Any) {
            if UserDefaults.standard.bool(forKey: "SoundKeyOnline") == true {
                guard let url = configuration?.sound7URL else { return }
                let playerItem = CachingPlayerItem(url: url)
                firesound7 = AVPlayer(playerItem: playerItem)
                firesound7.automaticallyWaitsToMinimizeStalling = false
                playerItem.download()
                firesound7.play()
            }
            else if UserDefaults.standard.bool(forKey: "SoundKeyOnline") == false {
                stopSounds()
                guard let url = configuration?.sound7URL else { return }
                let playerItem = CachingPlayerItem(url: url)
                firesound7 = AVPlayer(playerItem: playerItem)
                firesound7.automaticallyWaitsToMinimizeStalling = false
                playerItem.download()
                firesound7.play()
            }
        }
        @IBAction func soundpressed8(_ sender: Any) {
            if UserDefaults.standard.bool(forKey: "SoundKeyOnline") == true {
                guard let url = configuration?.sound8URL else { return }
                let playerItem = CachingPlayerItem(url: url)
                firesound8 = AVPlayer(playerItem: playerItem)
                firesound8.automaticallyWaitsToMinimizeStalling = false
                playerItem.download()
                firesound8.play()
            }
            else if UserDefaults.standard.bool(forKey: "SoundKeyOnline") == false {
                stopSounds()
                guard let url = configuration?.sound8URL else { return }
                let playerItem = CachingPlayerItem(url: url)
                firesound8 = AVPlayer(playerItem: playerItem)
                firesound8.automaticallyWaitsToMinimizeStalling = false
                playerItem.download()
                firesound8.play()
            }
        }
        @IBAction func soundpressed9(_ sender: Any) {
            if UserDefaults.standard.bool(forKey: "SoundKeyOnline") == true {
                guard let url = configuration?.sound9URL else { return }
                let playerItem = CachingPlayerItem(url: url)
                firesound9 = AVPlayer(playerItem: playerItem)
                firesound9.automaticallyWaitsToMinimizeStalling = false
                playerItem.download()
                firesound9.play()
            }
            else if UserDefaults.standard.bool(forKey: "SoundKeyOnline") == false {
                stopSounds()
                guard let url = configuration?.sound9URL else { return }
                let playerItem = CachingPlayerItem(url: url)
                firesound9 = AVPlayer(playerItem: playerItem)
                firesound9.automaticallyWaitsToMinimizeStalling = false
                playerItem.download()
                firesound9.play()
            }
        }
        @IBAction func soundpressed10(_ sender: Any) {
            if UserDefaults.standard.bool(forKey: "SoundKeyOnline") == true {
                guard let url = configuration?.sound10URL else { return }
                let playerItem = CachingPlayerItem(url: url)
                firesound10 = AVPlayer(playerItem: playerItem)
                firesound10.automaticallyWaitsToMinimizeStalling = false
                playerItem.download()
                firesound10.play()
            }
            else if UserDefaults.standard.bool(forKey: "SoundKeyOnline") == false {
                stopSounds()
                guard let url = configuration?.sound10URL else { return }
                let playerItem = CachingPlayerItem(url: url)
                firesound10 = AVPlayer(playerItem: playerItem)
                firesound10.automaticallyWaitsToMinimizeStalling = false
                playerItem.download()
                firesound10.play()
            }
        }
        @IBAction func soundpressed11(_ sender: Any) {
            if UserDefaults.standard.bool(forKey: "SoundKeyOnline") == true {
                guard let url = configuration?.sound11URL else { return }
                let playerItem = CachingPlayerItem(url: url)
                firesound11 = AVPlayer(playerItem: playerItem)
                firesound11.automaticallyWaitsToMinimizeStalling = false
                playerItem.download()
                firesound11.play()
            }
            else if UserDefaults.standard.bool(forKey: "SoundKeyOnline") == false {
                stopSounds()
                guard let url = configuration?.sound11URL else { return }
                let playerItem = CachingPlayerItem(url: url)
                firesound11 = AVPlayer(playerItem: playerItem)
                firesound11.automaticallyWaitsToMinimizeStalling = false
                playerItem.download()
                firesound11.play()
            }
        }
        @IBAction func soundpressed12(_ sender: Any) {
            if UserDefaults.standard.bool(forKey: "SoundKeyOnline") == true {
                guard let url = configuration?.sound12URL else { return }
                let playerItem = CachingPlayerItem(url: url)
                firesound12 = AVPlayer(playerItem: playerItem)
                firesound12.automaticallyWaitsToMinimizeStalling = false
                playerItem.download()
                firesound12.play()
            }
            else if UserDefaults.standard.bool(forKey: "SoundKeyOnline") == false {
                stopSounds()
                guard let url = configuration?.sound12URL else { return }
                let playerItem = CachingPlayerItem(url: url)
                firesound12 = AVPlayer(playerItem: playerItem)
                firesound12.automaticallyWaitsToMinimizeStalling = false
                playerItem.download()
                firesound12.play()
            }
        }
    
        @objc func stopSounds() {
            firesound1.replaceCurrentItem(with: nil)
            firesound2.replaceCurrentItem(with: nil)
            firesound3.replaceCurrentItem(with: nil)
            firesound4.replaceCurrentItem(with: nil)
            firesound5.replaceCurrentItem(with: nil)
            firesound6.replaceCurrentItem(with: nil)
            firesound7.replaceCurrentItem(with: nil)
            firesound8.replaceCurrentItem(with: nil)
            firesound9.replaceCurrentItem(with: nil)
            firesound10.replaceCurrentItem(with: nil)
            firesound11.replaceCurrentItem(with: nil)
            firesound12.replaceCurrentItem(with: nil)
        }
    
        override func didReceiveMemoryWarning() {
        }
    }

    如您所见,从剪切和粘贴中可以看出,它是相当大的,但实际的逻辑是最小的。我该如何简化?

    0 回复  |  直到 6 年前
        1
  •  0
  •   王永吉    6 年前

    您可以使用“引用门店集合”替换“引用门店”。 然后

    @IBOutlet weak var firelabel1: UIButton?
    @IBOutlet weak var firelabel2: UIButton?
    @IBOutlet weak var firelabel3: UIButton?
    @IBOutlet weak var firelabel4: UIButton?
    @IBOutlet weak var firelabel5: UIButton?
    @IBOutlet weak var firelabel6: UIButton?
    @IBOutlet weak var firelabel7: UIButton?
    @IBOutlet weak var firelabel8: UIButton?
    @IBOutlet weak var firelabel9: UIButton?
    @IBOutlet weak var firelabel10: UIButton?
    @IBOutlet weak var firelabel11: UIButton?
    @IBOutlet weak var firelabel12: UIButton?
    
    @IBOutlet weak var fireimage1: UIImageView!
    @IBOutlet weak var fireimage2: UIImageView!
    @IBOutlet weak var fireimage3: UIImageView!
    @IBOutlet weak var fireimage4: UIImageView!
    @IBOutlet weak var fireimage5: UIImageView!
    @IBOutlet weak var fireimage6: UIImageView!
    @IBOutlet weak var fireimage7: UIImageView!
    @IBOutlet weak var fireimage8: UIImageView!
    @IBOutlet weak var fireimage9: UIImageView!
    @IBOutlet weak var fireimage10: UIImageView!
    @IBOutlet weak var fireimage11: UIImageView!
    @IBOutlet weak var fireimage12: UIImageView!
    

    将成为

    @IBOutlet var firelabels: [UIButton]!
    @IBOutlet var fireimages: [UIImageView]!
    

    然后 使用factory方法创建“communityconfiguration”&“playeritem”

    例如

    lazy var fireString_image_arr: [String] = {
        var image_arr = [String]()
        for i in 1...12 {
            image_arr.append(NSLocalizedString("Firestring_image\(i)", comment: ""))
        }
        return image_arr
    }()
    
    var loadingURL = [URL]()
    var imageURL_arr = [URL]()
    var soundURL = [URL]()
    
    init(snapshot: DataSnapshot) {
        if let dict = snapshot.value as? [String: Any] {
            let json = JSON(dict)
            for i in 0...11 {
                if let url = URL.init(string: json[fireString_image_arr[i]].stringValue) {
                    imageURL_arr.append(url)
                }
            }
        }
    }
    
    
    
    func updateViewWithRCValues() {
            for i in 0...11 {
                let tmp_string = NSLocalizedString("Firestring_text\(i + 1)", comment: "")
                let button_label = RemoteConfig.remoteConfig().configValue(forKey: tmp_string).stringValue ?? ""
                firelabels[i].setTitle(button_label, for: .normal)
            }
        }
    

    所有按钮都可以使用相同的操作

    var fireSound_arr = [AVPlayer]()
    
    @IBAction func soundpressed(_ sender: Any) {
            if let configuration = self.configuration,
                let index = firelabels.firstIndex(of: sender as! UIButton) {
    
            }
    }
    

    像那样的东西 你需要继续改进