2017-07-20 191 views
1

我已经创建了一些代码,以便从图像选取器中提取图像,并将图像放入数组中。使用Swift 3或4的iOS重构代码建议

我想将数组中的图像放入另一个用于上传到firebase的变量。我遇到的问题是,如果用户没有选择8张图片,那么它会使程序崩溃,因为新变量正在等待它们,所以我写了一些If,Else代码,但是它长时间地执行了大量的计数检查阵列中的图像。我期待看看这是否可以重构,如果有的话可能是switch语句。我相当新,所以也许我对交换机可以做什么有错误的想法。我现在要读更多关于它们的内容。

以下是我的代码。

func doneButtonDidPress(_ imagePicker: ImagePickerController, images: [UIImage]) { 
    if images.count > 8 { 

     imagePicker.dismiss(animated: true, completion: nil) 

     photoNumber() 

    }else { 
     if images.count == 1 { 
    photo1 = images[0] 
     }else { 
      print("Tony: No image in number 1") 
     } 
      if images.count == 2 { 
    photo1 = images[0] 
    photo2 = images[1] 
      }else { 
       print("Tony: No image in number 2") 
      } 
     if images.count == 3 { 
      photo1 = images[0] 
      photo2 = images[1] 
      photo3 = images[2] 
     }else { 
      print("Tony: No image in number 3") 
     } 
     if images.count == 4 { 
      photo1 = images[0] 
      photo2 = images[1] 
      photo3 = images[2] 
      image4 = images[3] 
     }else { 
      print("Tony: No image in number 4") 
     } 
     if images.count == 5 { 
      photo1 = images[0] 
      photo2 = images[1] 
      photo3 = images[2] 
      image4 = images[3] 
      image5 = images[4] 
     }else { 
      print("Tony: No image in number 5") 
     } 
     if images.count == 6 { 
      photo1 = images[0] 
      photo2 = images[1] 
      photo3 = images[2] 
      image4 = images[3] 
      image5 = images[4] 
      image6 = images[5] 
     }else { 
      print("Tony: No image in number 6") 
     } 
     if images.count == 7 { 
      photo1 = images[0] 
      photo2 = images[1] 
      photo3 = images[2] 
      image4 = images[3] 
      image5 = images[4] 
      image6 = images[5] 
      image7 = images[6] 
     }else { 
      print("Tony: No image in number 7") 
     } 
     if images.count == 8 { 
      photo1 = images[0] 
      photo2 = images[1] 
      photo3 = images[2] 
      image4 = images[3] 
      image5 = images[4] 
      image6 = images[5] 
      image7 = images[6] 
      image8 = images[7] 
     }else { 
      print("Tony: No image in number 8") 
     } 

    imagePicker.dismiss(animated: true, completion: nil) 
} 
} 
+0

你为什么要保持图像的变量?你不能使用相同的数组&上解雇数组上传图像对象? – Ellen

+0

我已经尝试过,但是当我交换变量时,我把图片放入ie photo1中,图片[0]上传到firebase时调用它说图片未定义,我推测这是因为它是在调用图片的函数中创建的选择器 –

+0

但在运行时,您可以通过迭代遍历数组而不是先检查 – Ellen

回答

2

是,switch语句将在这里工作,但是任何你与小的变化一遍又一遍地重复相同的代码时,这是一个“代码味道”,你应该想想做不同的方式它。

将值手动安装到变量名为photo1,photo2,photo3,image4,image5 .. image8是尴尬的。为什么你有一堆具有不同数字后缀的变量?这表明您应该将图片保存到数组中,而不是从输入的图像数组手动映射到唯一变量。

func doneButtonDidPress(
    _ imagePicker: ImagePickerController, 
    images: [UIImage]) { 
    switch images.count { 
     case 0: 
     print("No images") //Nothing to see here 
     case 1: 
     photo1 = images[0] 
     case 2: 
     photo1 = images[0] 
     photo2 = images[1] 
     case 3: 
     photo1 = images[0] 
     photo2 = images[1] 
     photo3 = images[2] 
     case 4: 
     photo1 = images[0] 
     photo2 = images[1] 
     photo3 = images[2] 
     image4 = images[3] 
     case 5: 
     photo1 = images[0] 
     photo2 = images[1] 
     photo3 = images[2] 
     image4 = images[3] 
     image5 = images[4] 
     case 6: 
     photo1 = images[0] 
     photo2 = images[1] 
     photo3 = images[2] 
     image4 = images[3] 
     image5 = images[4] 
     image6 = images[5] 
     case 7: 
     photo1 = images[0] 
     photo2 = images[1] 
     photo3 = images[2] 
     image4 = images[3] 
     image5 = images[4] 
     image6 = images[5] 
     image7 = images[6] 
     case 8: 
     photo1 = images[0] 
     photo2 = images[1] 
     photo3 = images[2] 
     image4 = images[3] 
     image5 = images[4] 
     image6 = images[5] 
     image7 = images[6] 
     image8 = images[7] 
     default: 
     print("Too many images") 
    } 
} 
+0

谢谢@Duncan我会尝试让它们保存在一个数组中,当我创建一个名为photos的数组时:[UIImage ]!然后尝试为其分配一张图片,即照片[0] =图片[0]图像选择器关闭时发生崩溃。 –

+0

感谢您的帮助我能够使用您的建议和更改创建一个名为photos的新UIImage阵列,然后将这些图像传递到新阵列中,然后使用基于.count进行上传的新阵列。这样我不需要做,如果,否则或切换。 –

0

帮助后,我能够创建一个名为照片的新阵列UIImage。

var photos: Array<UIImage> = [] 

然后我就能够通过图像阵列举行imagePicker的完成采摘函数创建的照片,并把它们放到新照片阵列,然后允许我使用基于photos.count到阵列将图像上传到firebase,然后将图像传递给下一个视图控制器以添加说明。

func doneButtonDidPress(_ imagePicker: ImagePickerController, images: [UIImage]) { 

     if images.count > 8 { 
     imagePicker.dismiss(animated: true, completion: nil) 
      photoNumber() 
     }else { 
      photos = images // I added this instead of the If, Else statement or Switch statement 
     }