创建多个阵列,最多可添加一个最终阵列。调试问题。 Swift和Xcode

时间:2017-07-08 22:15:15

标签: ios arrays swift xcode debugging

我正在尝试创建一个flashcard应用程序。我成功地获得了应用程序,我可以刷过一系列照片(见下面的代码)。

import UIKit

class SecondViewController: UIViewController , UIGestureRecognizerDelegate  {



@IBAction func home(_ sender: Any) {
performSegue(withIdentifier: "home", sender: self)
}


@IBOutlet weak var imgPhoto: UIImageView!





var imageList:[String] = ["alligator", "apple", "balance", "ball", "ballerina", "balloon", "bell", "belt", "black", "blanket", "blender", "blocks", "blond", "blood", "blow", "blue", "bowling", "bubble", "bully", "calendar", "castle", "cello", "clam", "clamp", "clap", "claw", "clean", "climb", "clip", "cloud", "cold", "colors", "crawl", "curlyhair", "dollar", "dolphin", "elephant", "elf", "eyelashes", "fall", "fishbowl", "flag", "flipflop", "float", "floor", "flower", "fluffy", "flute", "fly", "gasoline", "girl", "glacier", "glad", "glasses", "glide", "glitter", "globe", "glove", "glue", "goalie", "golf", "hula", "jellyfish", "ladder", "ladybug", "lake", "lamb", "lamp", "lark", "laughing", "lawnmower", "leaf", "leash", "left", "leg", "lemon", "leopard", "leprechaun", "letters", "licking", "lifesaver", "lifting", "lightbulb", "lightning", "lime", "lion", "lips", "list", "listen", "llama", "lock", "log", "look", "love", "lunch", "melt", "milk", "olive", "owl", "pail", "peel", "pillow", "pilot", "planet", "plank", "plant", "plate", "play", "plum", "plumber", "plus", "polarbear", "pool", "rollerskate", "ruler", "shelf", "silly", "sled", "sleep", "sleeves", "slice", "slide", "slime", "slip", "slow", "smile", "telephone", "television", "tulip", "umbrella", "valentine", "violin", "whale", "wheel", "xylophone", "yellow"]
 let maxImages = 135
 var imageIndex: NSInteger = 0


override func viewDidLoad() {
super.viewDidLoad()

// Do any additional setup after loading the view.
imgPhoto.isUserInteractionEnabled = true


let leftSwipe = UISwipeGestureRecognizer(target: self, action: #selector(Swiped(gesture:)))
leftSwipe.cancelsTouchesInView = false


let rightSwipe = UISwipeGestureRecognizer(target: self, action: #selector(Swiped(gesture:)))
rightSwipe.cancelsTouchesInView = false

leftSwipe.direction = .left
rightSwipe.direction = .right


view.addGestureRecognizer(leftSwipe)
view.addGestureRecognizer(rightSwipe)


}



func Swiped(gesture: UIGestureRecognizer) {

if let swipeGesture = gesture as? UISwipeGestureRecognizer {

    switch swipeGesture.direction {

    case UISwipeGestureRecognizerDirection.right :
        print("User swiped right")

        // decrease index first

        imageIndex -= 1

        // check if index is in range

        if imageIndex < 0 {

            imageIndex = maxImages

        }

        imgPhoto.image = UIImage(named: imageList[imageIndex])

    case UISwipeGestureRecognizerDirection.left:
        print("User swiped Left")

        // increase index first

        imageIndex += 1

        // check if index is in range

        if imageIndex > maxImages {

            imageIndex = 0

        }

        imgPhoto.image = UIImage(named: imageList[imageIndex])




    default:
        break //stops the code/codes nothing.


    }
}

但是我需要添加一个设置页面,以便用户可以选择他们想要显示的单词组,所以我尝试更改代码,以便将单词分成小组并创建组&# 34;有源&#34;这样用户可以在设置页面中操作它们(如果用户关闭了一个单词组,那么该单词组不再处于活动状态)。但是我无法让这个新代码顺利运行,它充满了bug。你们中的任何人都可以看到这个新代码有什么问题吗?截至目前我还没有设置页面,但是当我运行新代码时,我应该可以像原始代码一样刷过所有图片,但目前这是不可能的。任何帮助将非常感激。谢谢!

import UIKit

class SecondViewController: UIViewController , UIGestureRecognizerDelegate  {



@IBAction func home(_ sender: Any) {
performSegue(withIdentifier: "home", sender: self)
}


@IBOutlet weak var imgPhoto: UIImageView!



struct List {
    let words: [String]
    var active: Bool
}

let list1 = List(words:["lake", "lamb", "lamp", "lark", "leaf", "leash", "left", "leg", "lime", "lion", "lips", "list", "lock", "log", "look", "love", "lunch"], active: true)

let list2 = List(words: ["ladder", "ladybug", "laughing", "lawnmower", "lemon", "leopard", "leprechaun", "letters", "licking", "lifesaver", "lifting", "lightbulb", "lightning", "listen", "llama"], active: true)

let list3 = List(words: ["alligator", "balance", "ballerina", "balloon", "bowling", "cello", "colors", "curlyhair", "dollar", "dolphin", "elephant", "eyelashes", "gasoline", "goalie", "hula", "jellyfish", "olive", "pillow", "pilot", "polarbear", "rollerskate", "ruler", "silly", "telephone", "television", "tulip", "umbrella", "valentine", "violin", "xylophone", "yellow"], active: true)

let list4 = List(words: ["apple", "ball", "bell", "bubble", "castle", "fall", "fishbowl", "girl", "owl", "pail", "peel", "pool", "smile", "whale", "wheel"], active: true)

let list5 = List(words: ["planet", "plank", "plant", "plate", "play", "plum", "plumber", "plus"], active: true)

let list6 = List(words: ["black", "blanket", "blender", "blocks", "blond", "blood", "blow", "blue"], active: true)

let list7 = List(words: ["flag", "flipflop", "float", "floor", "flower", "fluffy", "flute", "fly"], active: true)

let list8 = List(words: ["glacier", "glad", "glasses", "glide", "glitter", "globe", "glove", "glue"], active: true)

let list9 = List(words: ["clam", "clamp", "clap", "claw", "clean", "climb", "clip", "cloud"], active: true)

let list10 = List(words:["sled", "sleep", "sleeves", "slice", "slide", "slime", "slip", "slow"], active: true)

let list11 = List(words: ["belt", "cold", "dolphin", "elf", "golf", "melt", "milk", "shelf"], active: true)



var imageIndex: NSInteger = 0









override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
imgPhoto.isUserInteractionEnabled = true




    var wordLists = [list1, list2, list3, list4, list5, list6, list7, list8, list9, list10, list11]

    var imageList: [String] {

        let active = wordLists.reduce([]) { (result:[String], list:List) in
            if list.active {
                return result + list.words

            } else {
                return result
            }
        }

        return active

    }


    let leftSwipe = UISwipeGestureRecognizer(target: self, action: #selector(Swiped(gesture:)))
    leftSwipe.cancelsTouchesInView = false


    let rightSwipe = UISwipeGestureRecognizer(target: self, action: #selector(Swiped(gesture:)))
    rightSwipe.cancelsTouchesInView = false

    leftSwipe.direction = .left
    rightSwipe.direction = .right


    view.addGestureRecognizer(leftSwipe)
    view.addGestureRecognizer(rightSwipe)


}



func Swiped(gesture: UIGestureRecognizer) {

    if let swipeGesture = gesture as? UISwipeGestureRecognizer {

        switch swipeGesture.direction {

        case UISwipeGestureRecognizerDirection.right :
            print("User swiped right")

            // decrease index first

            imageIndex -= 1

            // check if index is in range

            if imageIndex < 0 {

                imageIndex = imageList

            }

            imgPhoto.image = UIImage(named: imageList[imageIndex])

        case UISwipeGestureRecognizerDirection.left:
            print("User swiped Left")

            // increase index first

            imageIndex += 1

            // check if index is in range

            if imageIndex > imageList {

                imageIndex = 0

            }

            imgPhoto.image = UIImage(named: imageList[imageIndex])




        default:
            break //stops the code/codes nothing.


        }
    }
}










override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}


/*
// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.
}
*/

1 个答案:

答案 0 :(得分:0)

你很亲密;需要一些修复:

  1. imageList计算变量移至类级别,而不是viewDidLoad内。

  2. imageIndex变量可以是Int而不是NSInteger。这不是一个突破性的变化,但会使事情更容易,并且更好的Swift风格。

  3. 您之前使用maxImages变量的地方,可以将其替换为imageList.count,即数组中元素的总数。

  4. 这是最终编辑的代码。它汇编;让我知道它是否有效!

    class SecondViewController: UIViewController , UIGestureRecognizerDelegate  {
    
        @IBAction func home(_ sender: Any) {
            performSegue(withIdentifier: "home", sender: self)
        }
    
        @IBOutlet weak var imgPhoto: UIImageView!
    
        struct List {
            let words: [String]
            var active: Bool
        }
    
        let list1 = List(words:["lake", "lamb", "lamp", "lark", "leaf", "leash", "left", "leg", "lime", "lion", "lips", "list", "lock", "log", "look", "love", "lunch"], active: true)
    
        let list2 = List(words: ["ladder", "ladybug", "laughing", "lawnmower", "lemon", "leopard", "leprechaun", "letters", "licking", "lifesaver", "lifting", "lightbulb", "lightning", "listen", "llama"], active: true)
    
        let list3 = List(words: ["alligator", "balance", "ballerina", "balloon", "bowling", "cello", "colors", "curlyhair", "dollar", "dolphin", "elephant", "eyelashes", "gasoline", "goalie", "hula", "jellyfish", "olive", "pillow", "pilot", "polarbear", "rollerskate", "ruler", "silly", "telephone", "television", "tulip", "umbrella", "valentine", "violin", "xylophone", "yellow"], active: true)
    
        let list4 = List(words: ["apple", "ball", "bell", "bubble", "castle", "fall", "fishbowl", "girl", "owl", "pail", "peel", "pool", "smile", "whale", "wheel"], active: true)
    
        let list5 = List(words: ["planet", "plank", "plant", "plate", "play", "plum", "plumber", "plus"], active: true)
    
        let list6 = List(words: ["black", "blanket", "blender", "blocks", "blond", "blood", "blow", "blue"], active: true)
    
        let list7 = List(words: ["flag", "flipflop", "float", "floor", "flower", "fluffy", "flute", "fly"], active: true)
    
        let list8 = List(words: ["glacier", "glad", "glasses", "glide", "glitter", "globe", "glove", "glue"], active: true)
    
        let list9 = List(words: ["clam", "clamp", "clap", "claw", "clean", "climb", "clip", "cloud"], active: true)
    
        let list10 = List(words:["sled", "sleep", "sleeves", "slice", "slide", "slime", "slip", "slow"], active: true)
    
        let list11 = List(words: ["belt", "cold", "dolphin", "elf", "golf", "melt", "milk", "shelf"], active: true)
    
        var imageIndex: Int = 0
    
        var imageList: [String] {
    
            let wordLists = [list1, list2, list3, list4, list5, list6, list7, list8, list9, list10, list11]
    
            let active = wordLists.reduce([]) { (result:[String], list:List) in
                if list.active {
                    return result + list.words
    
                } else {
                    return result
                }
            }
    
            return active
    
        }
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            // Do any additional setup after loading the view.
            imgPhoto.isUserInteractionEnabled = true
    
            let leftSwipe = UISwipeGestureRecognizer(target: self, action: #selector(Swiped(gesture:)))
            leftSwipe.cancelsTouchesInView = false
    
            let rightSwipe = UISwipeGestureRecognizer(target: self, action: #selector(Swiped(gesture:)))
            rightSwipe.cancelsTouchesInView = false
    
            leftSwipe.direction = .left
            rightSwipe.direction = .right
    
            view.addGestureRecognizer(leftSwipe)
            view.addGestureRecognizer(rightSwipe)
    
        }
    
        func Swiped(gesture: UIGestureRecognizer) {
    
            if let swipeGesture = gesture as? UISwipeGestureRecognizer {
    
                switch swipeGesture.direction {
    
                case UISwipeGestureRecognizerDirection.right :
                    print("User swiped right")
    
                    // decrease index first
    
                    imageIndex -= 1
    
                    // check if index is in range
    
                    if imageIndex < 0 {
    
                        imageIndex = imageList.count - 1
    
                    }
    
                    imgPhoto.image = UIImage(named: imageList[imageIndex])
    
                case UISwipeGestureRecognizerDirection.left:
                    print("User swiped Left")
    
                    // increase index first
    
                    imageIndex += 1
    
                    // check if index is in range
    
                    if imageIndex > imageList.count - 1 {
    
                        imageIndex = 0
    
                    }
    
                    imgPhoto.image = UIImage(named: imageList[imageIndex])
    
                default:
                    break //stops the code/codes nothing.
                }
            }
        }
    }