试图从Swift中的UI向数组索引添加值

时间:2015-02-03 19:20:37

标签: ios arrays swift

所以我试图对图像中的图像进行平均投票(每个图像的每个值分别存储。)

这里发生了什么:用户投票,向用户显示投票的平均值(来自过去的投票),然后用户点击"接下来"转到下一部电影投票。

我如何存储每个图像的值以使其有自己的平均值存储?我很快就开始......

这是我计算平均值的函数,以及保存投票数组的全局变量:

    var votes:[Double] = []

    func average(nums:[Double]) ->Double {    
    var total = 0.0
    for vote in nums {
        total += Double(vote)
    }
    let votesTotal = Double(nums.count)
    var average = total/votesTotal
    return average
}

我通过递增(仅10)访问图像。这通常是在UIButton中 计数器变量超出了正在执行计数器增量的IBAction的范围。

var counter = 1

   (IBACTION)
   counter++
    if counter == 10 {

        counter = 1
    }

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

    resultLabel.text = ""

    enableButtons()
    }

提前多多感谢。

2 个答案:

答案 0 :(得分:1)

考虑这段代码。为了测试这个,我将以下代码粘贴到一个名为AnimationObserver的类中,该类使用animationObserver实例化:AnimationObserver = AnimationObserver();

struct imageVotes
{
    var imageNumber:Int = 0
    var vote:Double = 0.0
}

var votes:[imageVotes] = []
var averages:[Double] = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
var imageNumber:Int = 0

var thisVote:Double = 0.0
{
    didSet
    {
        var imageVote:imageVotes = imageVotes()
        imageVote.imageNumber = imageNumber
        imageVote.vote = thisVote
        votes.append(imageVote)
        averages[imageNumber] = average(votes)
    }
}

func average(nums:[imageVotes]) ->Double
{
    var total:Double = 0.0
    var numVotes:Double = 0.0

    for var i = 0; i < nums.count; i++
    {
        if nums[i].imageNumber == imageNumber
        {
            total += nums[i].vote
            numVotes += 1.0
        }
    }
    var average = total/numVotes
    return average
}

如果那么从代码中的其他地方(其中animationObserver可见,可能是你的IBAction)我写道:

    animationObserver.imageNumber = 0
    animationObserver.thisVote = 5.0
    println("Average Vote for imageNumber \(animationObserver.imageNumber) is \(animationObserver.averages[animationObserver.imageNumber)")
    animationObserver.thisVote = 8.0
    println("Average Vote for imageNumber \(animationObserver.imageNumber) is \(animationObserver.averages[animationObserver.imageNumber)")


    animationObserver.imageNumber = 1
    animationObserver.thisVote = 7.0
    println("Average Vote for imageNumber \(animationObserver.imageNumber) is \(animationObserver.averages[animationObserver.imageNumber)")
    animationObserver.thisVote = 10.0
    println("Average Vote for imageNumber \(animationObserver.imageNumber) is \(animationObserver.averages[animationObserver.imageNumber)")

打印:

imageNumber 0的平均投票数为5.0 imageNumber 0的平均投票数为6.5
imageNumber 1的平均投票数为7.0
imageNumber 1的平均投票数为8.5

答案 1 :(得分:0)

您可以使用带有图像文件名的字典作为键。例如:

var dictAverages = [String:Double]()
dictAverages["image\(counter).jpg"] =  average(nums) //nums is the data array corresponding to the counter

我会更具体地帮助,但我很难理解你的代码。