Trying to capture integer data from Firebase into an array, and then sum all the elements
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
add a comment |
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
Use lowercase letters to start your variable names.
– Magnas
Jan 3 at 8:19
add a comment |
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
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
ios arrays swift firebase firebase-realtime-database
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
add a comment |
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
add a comment |
1 Answer
1
active
oldest
votes
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}
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
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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}
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
add a comment |
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}
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
add a comment |
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}
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}
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
add a comment |
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
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
Use lowercase letters to start your variable names.
– Magnas
Jan 3 at 8:19