Trying to capture integer data from Firebase into an array, and then sum all the elements












1















I'm trying to grab a bunch of integer values from Firebase, store them into an array, and then add all the elements.



I've tried using



let sum:Int = challengeList.reduce(0, +)


to get the sum of the elements in an array called challengeList, but the error I receive is "Ambiguous reference to member '+'"



func LoadPointsCompleted() {

self.challengeList.removeAll()

databaseReference = Database.database().reference()

let userID = Auth.auth().currentUser?.uid

let refChallenges = Database.database().reference(withPath: "Challenges").child(userID!).queryOrdered(byChild: "Status").queryEqual(toValue: "Complete")

refChallenges.observeSingleEvent(of: .value, with: { (snapshot) in

//if the reference have some values
if snapshot.childrenCount > 0 {

//clearing the list
self.challengeList.removeAll()



//iterating through all the values
for Challenges in snapshot.children.allObjects as! [DataSnapshot] {
//getting values
let challengeObject = Challenges.value as? [String: AnyObject]
let Points = challengeObject?["Points"] as! Int

//creating challenge object with model and fetched values
let challenge = pointsModel(Points: Points as Int?)

//appending it to list
self.challengeList.append(challenge)


let sum:Int = challengeList.reduce(0, +)
}


}



}

)}


// also using the following model



import Foundation

class pointsModel {

var Points: Int?

init(Points: Int?){

self.Points = Points
}
}


I can't get this to compile...










share|improve this question

























  • Use lowercase letters to start your variable names.

    – Magnas
    Jan 3 at 8:19
















1















I'm trying to grab a bunch of integer values from Firebase, store them into an array, and then add all the elements.



I've tried using



let sum:Int = challengeList.reduce(0, +)


to get the sum of the elements in an array called challengeList, but the error I receive is "Ambiguous reference to member '+'"



func LoadPointsCompleted() {

self.challengeList.removeAll()

databaseReference = Database.database().reference()

let userID = Auth.auth().currentUser?.uid

let refChallenges = Database.database().reference(withPath: "Challenges").child(userID!).queryOrdered(byChild: "Status").queryEqual(toValue: "Complete")

refChallenges.observeSingleEvent(of: .value, with: { (snapshot) in

//if the reference have some values
if snapshot.childrenCount > 0 {

//clearing the list
self.challengeList.removeAll()



//iterating through all the values
for Challenges in snapshot.children.allObjects as! [DataSnapshot] {
//getting values
let challengeObject = Challenges.value as? [String: AnyObject]
let Points = challengeObject?["Points"] as! Int

//creating challenge object with model and fetched values
let challenge = pointsModel(Points: Points as Int?)

//appending it to list
self.challengeList.append(challenge)


let sum:Int = challengeList.reduce(0, +)
}


}



}

)}


// also using the following model



import Foundation

class pointsModel {

var Points: Int?

init(Points: Int?){

self.Points = Points
}
}


I can't get this to compile...










share|improve this question

























  • Use lowercase letters to start your variable names.

    – Magnas
    Jan 3 at 8:19














1












1








1








I'm trying to grab a bunch of integer values from Firebase, store them into an array, and then add all the elements.



I've tried using



let sum:Int = challengeList.reduce(0, +)


to get the sum of the elements in an array called challengeList, but the error I receive is "Ambiguous reference to member '+'"



func LoadPointsCompleted() {

self.challengeList.removeAll()

databaseReference = Database.database().reference()

let userID = Auth.auth().currentUser?.uid

let refChallenges = Database.database().reference(withPath: "Challenges").child(userID!).queryOrdered(byChild: "Status").queryEqual(toValue: "Complete")

refChallenges.observeSingleEvent(of: .value, with: { (snapshot) in

//if the reference have some values
if snapshot.childrenCount > 0 {

//clearing the list
self.challengeList.removeAll()



//iterating through all the values
for Challenges in snapshot.children.allObjects as! [DataSnapshot] {
//getting values
let challengeObject = Challenges.value as? [String: AnyObject]
let Points = challengeObject?["Points"] as! Int

//creating challenge object with model and fetched values
let challenge = pointsModel(Points: Points as Int?)

//appending it to list
self.challengeList.append(challenge)


let sum:Int = challengeList.reduce(0, +)
}


}



}

)}


// also using the following model



import Foundation

class pointsModel {

var Points: Int?

init(Points: Int?){

self.Points = Points
}
}


I can't get this to compile...










share|improve this question
















I'm trying to grab a bunch of integer values from Firebase, store them into an array, and then add all the elements.



I've tried using



let sum:Int = challengeList.reduce(0, +)


to get the sum of the elements in an array called challengeList, but the error I receive is "Ambiguous reference to member '+'"



func LoadPointsCompleted() {

self.challengeList.removeAll()

databaseReference = Database.database().reference()

let userID = Auth.auth().currentUser?.uid

let refChallenges = Database.database().reference(withPath: "Challenges").child(userID!).queryOrdered(byChild: "Status").queryEqual(toValue: "Complete")

refChallenges.observeSingleEvent(of: .value, with: { (snapshot) in

//if the reference have some values
if snapshot.childrenCount > 0 {

//clearing the list
self.challengeList.removeAll()



//iterating through all the values
for Challenges in snapshot.children.allObjects as! [DataSnapshot] {
//getting values
let challengeObject = Challenges.value as? [String: AnyObject]
let Points = challengeObject?["Points"] as! Int

//creating challenge object with model and fetched values
let challenge = pointsModel(Points: Points as Int?)

//appending it to list
self.challengeList.append(challenge)


let sum:Int = challengeList.reduce(0, +)
}


}



}

)}


// also using the following model



import Foundation

class pointsModel {

var Points: Int?

init(Points: Int?){

self.Points = Points
}
}


I can't get this to compile...







ios arrays swift firebase firebase-realtime-database






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jan 3 at 14:41









Frank van Puffelen

243k29387414




243k29387414










asked Jan 3 at 7:54









nm1213nm1213

448




448













  • Use lowercase letters to start your variable names.

    – Magnas
    Jan 3 at 8:19



















  • Use lowercase letters to start your variable names.

    – Magnas
    Jan 3 at 8:19

















Use lowercase letters to start your variable names.

– Magnas
Jan 3 at 8:19





Use lowercase letters to start your variable names.

– Magnas
Jan 3 at 8:19












1 Answer
1






active

oldest

votes


















1














Since points are always Int, there is no need to make it optional. Also you can use struct and then there is no need for creating own initializer, you get it for free



struct PointsModel {
var points: Int
}


... note that types starts with big capital letter and constants, variables, methods with small capital letter





Then you can get it compiled by adding points property to sum, not the whole model



challengeList.reduce(0) {$0 + $1.points}





share|improve this answer


























  • Thanks Robert... Tried the following: let sum = challengeList.reduce(0, {$0.points + $1.Points}) it now says "Type of expression is ambiguous without more context" with the + highlighted.

    – nm1213
    Jan 3 at 8:20











  • @nm1213 my mistake, edited my answer

    – Robert Dresler
    Jan 3 at 8:20






  • 1





    Hi Robert... did the trick! Thanks!!!

    – nm1213
    Jan 3 at 8:34











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54018330%2ftrying-to-capture-integer-data-from-firebase-into-an-array-and-then-sum-all-the%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









1














Since points are always Int, there is no need to make it optional. Also you can use struct and then there is no need for creating own initializer, you get it for free



struct PointsModel {
var points: Int
}


... note that types starts with big capital letter and constants, variables, methods with small capital letter





Then you can get it compiled by adding points property to sum, not the whole model



challengeList.reduce(0) {$0 + $1.points}





share|improve this answer


























  • Thanks Robert... Tried the following: let sum = challengeList.reduce(0, {$0.points + $1.Points}) it now says "Type of expression is ambiguous without more context" with the + highlighted.

    – nm1213
    Jan 3 at 8:20











  • @nm1213 my mistake, edited my answer

    – Robert Dresler
    Jan 3 at 8:20






  • 1





    Hi Robert... did the trick! Thanks!!!

    – nm1213
    Jan 3 at 8:34
















1














Since points are always Int, there is no need to make it optional. Also you can use struct and then there is no need for creating own initializer, you get it for free



struct PointsModel {
var points: Int
}


... note that types starts with big capital letter and constants, variables, methods with small capital letter





Then you can get it compiled by adding points property to sum, not the whole model



challengeList.reduce(0) {$0 + $1.points}





share|improve this answer


























  • Thanks Robert... Tried the following: let sum = challengeList.reduce(0, {$0.points + $1.Points}) it now says "Type of expression is ambiguous without more context" with the + highlighted.

    – nm1213
    Jan 3 at 8:20











  • @nm1213 my mistake, edited my answer

    – Robert Dresler
    Jan 3 at 8:20






  • 1





    Hi Robert... did the trick! Thanks!!!

    – nm1213
    Jan 3 at 8:34














1












1








1







Since points are always Int, there is no need to make it optional. Also you can use struct and then there is no need for creating own initializer, you get it for free



struct PointsModel {
var points: Int
}


... note that types starts with big capital letter and constants, variables, methods with small capital letter





Then you can get it compiled by adding points property to sum, not the whole model



challengeList.reduce(0) {$0 + $1.points}





share|improve this answer















Since points are always Int, there is no need to make it optional. Also you can use struct and then there is no need for creating own initializer, you get it for free



struct PointsModel {
var points: Int
}


... note that types starts with big capital letter and constants, variables, methods with small capital letter





Then you can get it compiled by adding points property to sum, not the whole model



challengeList.reduce(0) {$0 + $1.points}






share|improve this answer














share|improve this answer



share|improve this answer








edited Jan 3 at 8:20

























answered Jan 3 at 8:16









Robert DreslerRobert Dresler

7,3312727




7,3312727













  • Thanks Robert... Tried the following: let sum = challengeList.reduce(0, {$0.points + $1.Points}) it now says "Type of expression is ambiguous without more context" with the + highlighted.

    – nm1213
    Jan 3 at 8:20











  • @nm1213 my mistake, edited my answer

    – Robert Dresler
    Jan 3 at 8:20






  • 1





    Hi Robert... did the trick! Thanks!!!

    – nm1213
    Jan 3 at 8:34



















  • Thanks Robert... Tried the following: let sum = challengeList.reduce(0, {$0.points + $1.Points}) it now says "Type of expression is ambiguous without more context" with the + highlighted.

    – nm1213
    Jan 3 at 8:20











  • @nm1213 my mistake, edited my answer

    – Robert Dresler
    Jan 3 at 8:20






  • 1





    Hi Robert... did the trick! Thanks!!!

    – nm1213
    Jan 3 at 8:34

















Thanks Robert... Tried the following: let sum = challengeList.reduce(0, {$0.points + $1.Points}) it now says "Type of expression is ambiguous without more context" with the + highlighted.

– nm1213
Jan 3 at 8:20





Thanks Robert... Tried the following: let sum = challengeList.reduce(0, {$0.points + $1.Points}) it now says "Type of expression is ambiguous without more context" with the + highlighted.

– nm1213
Jan 3 at 8:20













@nm1213 my mistake, edited my answer

– Robert Dresler
Jan 3 at 8:20





@nm1213 my mistake, edited my answer

– Robert Dresler
Jan 3 at 8:20




1




1





Hi Robert... did the trick! Thanks!!!

– nm1213
Jan 3 at 8:34





Hi Robert... did the trick! Thanks!!!

– nm1213
Jan 3 at 8:34




















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54018330%2ftrying-to-capture-integer-data-from-firebase-into-an-array-and-then-sum-all-the%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Monofisismo

Angular Downloading a file using contenturl with Basic Authentication

Olmecas