简体   繁体   English

快速检查数组元素

[英]Array element checking in swift

Currently implementing a favourite function to my application which is based on quotes.目前正在为我的应用程序实现一个基于引号的最喜欢的功能。 I would like to perform a check for if the user has already saved an element to an array.我想检查用户是否已经将元素保存到数组中。 If they have, I would change a favour button to unfavour button.如果他们有,我会将赞成按钮更改为不赞成按钮。
import UIKit导入 UIKit

class DreamViewController: UIViewController {

    @IBOutlet var liketext: UIButton!
    @IBOutlet var QuoteImage: UIImageView!
    @IBOutlet weak var DreamLabel: UILabel!
    var counter = 1

    var factIndex = 0

    let dreamFact = Dream()

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        DreamLabel.text = dreamFact.dreamArray[factIndex]
    }

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


    @IBAction func LeftSwipe() {
        factIndex--
        var number = dreamFact.dreamArray.count - 1
        if (factIndex < 0){
            self.factIndex = number

        }
        DreamLabel.text = dreamFact.dreamArray[factIndex]
        if counter == 1 {

            counter = 36

        } else {

            self.counter--

        }

        QuoteImage.image = UIImage(named: "frame\(counter).jpg")

    }
@IBAction func RightSwipe() {
        factIndex++
        if factIndex >= dreamFact.dreamArray.count {
            self.factIndex = 0
        }
        DreamLabel.text = dreamFact.dreamArray[factIndex]
    if counter == 36 {

    counter = 1

    } else {

    self.counter++

    }
    QuoteImage.image = UIImage(named: "frame\(counter).jpg")
}
    struct Constants {
        static let defaults = NSUserDefaults.standardUserDefaults()
        static let fqKey = "FavoriteQuotes"
        static let like = "Like"
        static let unlike = "Unlike"
    }
    class DreamViewController {




        var favouriteQuotesArray = Constants.defaults.objectForKey(Constants.fqKey) as? [String] ?? [String]() {
            didSet {
                Constants.defaults.setObject(favouriteQuotesArray, forKey: Constants.fqKey)
            }



    }

         @IBOutlet weak var likeButton: UIButton! {

            didSet {
                let favourite = dreamArray[factIndex]
                if let foundIndex = find(favouriteQuotesArray, favourite) {
                    likeButton.setTitle(Constants.unlike, forState: .Normal)
                }
                else {
                    likeButton.setTitle(Constants.like, forState: .Normal)
                }
            }



        }

        @IBAction func likeButtonClicked(sender: UIButton) {
        }

        }
}

The dependency on upon the text which is unreliable because if the user reopens the app, the element would still be saved instead of starting out with the default unlike .对文本的依赖是不可靠的,因为如果用户重新打开应用程序,元素仍将被保存,而不是从默认的. If the element is found in the array.如果在数组中找到该元素。 How would I perform a search inside my favouriteQuotesArray if the element exists like :如果元素存在,我将如何在我的 favouriteQuotesArray 中执行搜索

if elementfound statement {

button.settitle(unlike)
removearrayatindex statement.

} else {
button.settitle(like)
makeQuoteFavourite()
}

How would the array checking statement look like?数组检查语句会是什么样子? PS If you can please give tips on building the delete class? PS 如果可以,请提供有关构建删除类的提示? Update:更新:

 var favouriteQuotesArray: [String] = NSUserDefaults.standardUserDefaults().objectForKey("thekey") as! [String]

    func makeQuoteFavourite() {
        if favouriteQuotesArray == nil {
            favouriteQuotesArray = []
        }
        let currentQuote = dreamFact.dreamArray[factIndex]
        favouriteQuotesArray.append(currentQuote)
        NSUserDefaults.standardUserDefaults().setObject(favouriteQuotesArray, forKey: "thekey")
    }
    @IBAction func likeButton() {

        if contains(favouriteQuotesArray, dreamFact.dreamArray[factIndex]) {
        liketext.setTitle("Unlike", forState: UIControlState.Normal)
        }

Do it this way;这样做; some cleaner coding techniques to cut through the rubble included.一些更干净的编码技术来切割包括的碎石。

The declaration of favouriteQuotesArray is a gold star one liner. favouriteQuotesArray 的声明是金星单行。 Got it all?全懂了吗?

import UIKit

struct Constants {
    static let defaults = NSUserDefaults.standardUserDefaults()
    static let fqKey = "FavoriteQuotes"
    static let like = "Like"
    static let unlike = "Unlike"
}

class Page2ViewController: UIViewController {
    var dreamArray = [String]() // place holder so class compiles
    var factIndex = 0           // place holder so class compiles

    var favouriteQuotesArray = Constants.defaults.objectForKey(Constants.fqKey) as? [String] ?? [String]() {
        didSet {
            Constants.defaults.setObject(favouriteQuotesArray, forKey: Constants.fqKey)
        }
    }

    @IBOutlet weak var likeButton: UIButton! {
        didSet {
            let favourite = dreamArray[factIndex]
            if let foundIndex = find(favouriteQuotesArray, favourite) {
                likeButton.setTitle(Constants.unlike, forState: .Normal)
            }
            else {
                likeButton.setTitle(Constants.like, forState: .Normal)
            }
        }
    }

    @IBAction func likeButtonClicked(sender: UIButton) {
        let favourite = dreamArray[factIndex]
        if let foundIndex = find(favouriteQuotesArray, favourite) {
            sender.setTitle(Constants.like, forState: .Normal)
            favouriteQuotesArray.removeAtIndex(foundIndex)
        }
        else {
            sender.setTitle(Constants.unlike, forState: .Normal)
            favouriteQuotesArray.append(favourite)
        }
    }
}

Try this:尝试这个:

let currentQuote = dreamFact.dreamArray[factIndex]
if find(favouriteQuotesArray!, currentQuote) != nil {
    //Do something
}

The better and quick way to find out an element in an array is:找出数组中元素的更好、更快捷的方法是:

if contains(yourFavArray, stringStatement){
  //Contains you can write your logic
}

Change your favouriteArray as below:更改您的收藏夹数组如下:

var favouriteQuotesArray: [String] = NSUserDefaults.standardUserDefaults().objectForKey("thekey") as! [String]

Edited:编辑:

 if let foundIndex = find(favouriteQuotesArray, dreamFact.dreamArray[factIndex]) {
     sender.setTitle(Constants.like, forState: .Normal)
     favouriteQuotesArray.removeAtIndex(foundIndex)
 }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM