Hello
I'm making an app that displays large Double numbers, for example 86,859.002. The problem is how do I change the comma( , ) with the dot ( . )
Thank you
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
Hello
When I write decimal numbers in my SwiftUI app, the app doesn't detect the comma ( , )
How do I solve it? (I'm using a DecimalPad)
Thank you
Hello
When I dismiss my .sheet it is very slow and sometimes it doesn't work
.sheet(isPresented: $myViewi) {
MyView()
}
@Environment(\.presentationMode) var presentationMode
.navigationBarItems(trailing:
Button(action: {
presentationMode.wrappedValue.dismiss()
}) {
Image(systemName: "xmark").font(.title).foregroundColor(.blue)
}
)
How do I fix it?
Thank You
Hello
I wanted to ask if you know where I can start learning CoreML CreateML and integrate them with SwiftUI (NO UIKit please)
Thank You
Hello
I'm trying to decode a JSON File but it's not working and I can't understand why
Code:
import SwiftUI
struct Search: View {
let sf: [SF] = Bundle.main.decode("sf.json")
@State private var searchText: String = ""
var body: some View {
NavigationView{
Form {
Section(header: Text("Search bar")){
TextField("Search", text: $searchText)
.padding(7)
.background(Color(.systemGray6))
.cornerRadius(8)
}
Section(){
List{
ForEach(sf) { item in
Text(item.title)
}
}
}
}
.navigationTitle("SF")
}
}
}
struct SF: Codable, Identifiable {
var id: String
var title: String
var items: [String]
}
extension Bundle {
func decode<T: Codable>(_ file: String) -> T {
guard let url = self.url(forResource: file, withExtension: nil) else {
fatalError("Failed to locate \(file) in bundle.")
}
guard let data = try? Data(contentsOf: url) else {
fatalError("Failed to load \(file) from bundle.")
}
let decoder = JSONDecoder()
guard let loaded = try? decoder.decode(T.self, from: data) else {
fatalError("Failed to decode \(file) from bundle.")
}
return loaded
}
}
Here is the JSON file
[
{
"id": "all"
"title": "All",
"items": [
"square.and.arrow.up",
"square.and.arrow.up.fill",
"square.and.arrow.down"
]
}
]
Thank you
Hello
How di i fix the error at line 16: I
nstance member 'deci' cannot be used on type 'BMIView'; did you mean to use a value of this type instead?
import SwiftUI
struct BMIView: View {
@State var deci = "3"
var numberFormatter: NumberFormatter = {
let nf = NumberFormatter()
nf.locale = Locale.current
nf.numberStyle = .decimal
nf.maximumFractionDigits = Int(deci) ?? 0
return nf
}()
@State private var height = ""
@State private var weight = ""
@Environment(\.presentationMode) var presentationMode
var inputAfterConvertions: Double {
//Use NumberFormatter to read numeric values
let hh = numberFormatter.number(from: height)?.doubleValue ?? 0 //<-
let ww = numberFormatter.number(from: weight)?.doubleValue ?? 0 //<-
var ris: Double = 0
if hh > 0 && ww > 0{
ris = (ww / (hh * hh)) * 10000
return ris
}
return 0
}
var body: some View {
NavigationView{
Form{
Section(header: Text("Enter your height in cm")){
TextField("Input",text: $height)
.keyboardType(.decimalPad)
}
Section(header: Text("Enter your Weight in kg")){
TextField("Input",text: $weight)
.keyboardType(.decimalPad)
}
Section(header: Text("Check result")){
Text("\(inputAfterConvertions as NSNumber, formatter: numberFormatter)") //<-
}
}
.navigationTitle("BMI")
}
}
}
Thank you
Hello
I don't know why but when I put a List before my ForEach loop, all the text disappears
Code:
//
import SwiftUI
struct SearchDetailView: View {
var sf: SF
var body: some View {
ScrollView{
ForEach(sf.items, id: \.self) { item in
HStack{
Image(systemName: item)
Text(item)
}
}
.navigationTitle(sf.title)
}
}
}
Thank you for your time
Hello
How do I make the default placeholder of a CustomTextField (that has a double binding) a string (onAppear)
When I run the app on the TextField I see 0 instead of "Input"
Code:
import SwiftUI
struct BMIView: View {
var currencyFormatter: NumberFormatter {
let formatter = NumberFormatter()
formatter.locale = .current
formatter.numberStyle = .decimal
return formatter
}
@State private var height: Double?
var body: some View {
NavigationView{
Form{
Section(header: Text("Enter your height in cm")){
DecimalTextField("Input", value: $height.bound, formatter: currencyFormatter)
}
}
.navigationBarTitle("BMI")
}
}
}
struct DecimalTextField: UIViewRepresentable {
private var placeholder: String
@Binding var value: Double
private var formatter: NumberFormatter
init(_ placeholder: String,
value: Binding<Double>,
formatter: NumberFormatter ) {
self.placeholder = placeholder
self._value = value
self.formatter = formatter
}
func makeUIView(context: Context) -> UITextField {
let textfield = UITextField()
textfield.keyboardType = .decimalPad
textfield.delegate = context.coordinator
textfield.placeholder = placeholder
textfield.text = formatter.string(for: value) ?? placeholder
textfield.textAlignment = .left
let toolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: textfield.frame.size.width, height: 44))
let doneButton = UIBarButtonItem(title: "Done", style: .done,
target: self, action: #selector(textfield.doneButtonTapped(button:)))
let space = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.flexibleSpace,
target: nil,action: nil)
toolBar.setItems([space, doneButton], animated: true)
textfield.inputAccessoryView = toolBar
return textfield
}
func updateUIView(_ uiView: UITextField, context: Context) {
// Do nothing, needed for protocol
}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
class Coordinator: NSObject, UITextFieldDelegate {
var parent: DecimalTextField
init(_ textField: DecimalTextField) {
self.parent = textField
}
func textField(_ textField: UITextField,
shouldChangeCharactersIn range: NSRange,
replacementString string: String) -> Bool {
// Allow only numbers and decimal characters
let isNumber = CharacterSet.decimalDigits.isSuperset(of: CharacterSet(charactersIn: string))
let withDecimal = (
string == NumberFormatter().decimalSeparator &&
textField.text?.contains(string) == false
)
if isNumber || withDecimal,
let currentValue = textField.text as NSString?
{
// Update Value
let proposedValue = currentValue.replacingCharacters(in: range, with: string) as String
let decimalFormatter = NumberFormatter()
decimalFormatter.locale = Locale.current
decimalFormatter.numberStyle = .decimal
// Try currency formatter then Decimal formatrer
let number = self.parent.formatter.number(from: proposedValue) ?? decimalFormatter.number(from: proposedValue) ?? 0.0
// Set Value
let double = number.doubleValue
self.parent.value = double
}
return isNumber || withDecimal
}
func textFieldDidEndEditing(_ textField: UITextField,
reason: UITextField.DidEndEditingReason) {
// Format value with formatter at End Editing
textField.text = self.parent.formatter.string(for: self.parent.value)
}
}
}
// MARK: extension for done button
extension UITextField{
@objc func doneButtonTapped(button:UIBarButtonItem) -> Void {
self.resignFirstResponder()
}
}
extension Optional where Wrapped == Double {
var _bound: Double? {
get{
return self
}
set{
self = newValue
}
}
var bound: Double {
get{
return _bound ?? 0
}
set {
_bound = newValue
}
}
}
The problem might be at line 243
(I found the struct DecimalTextField on the internet)
Thank you for your time
Hello
I don't get any error when I fetch data but when I run I don't see any data
Thank you
import SwiftUI
import Combine
struct ContentView: View {
		@ObservedObject var networkController = NetworkController()
		@State var search: String = ""
		var body: some View {
				NavigationView{
						Form{
								Section(){
										TextField("Search", text: $search)
								}
								Section(){
										List(networkController.users.filter {
														$0.state.contains(search) }
												 , id: \.state){ user in
												Text(user.state)
										}
								}
						}
						.navigationTitle("API")
				}
		}
}
class NetworkController: ObservableObject {
		private var can: AnyCancellable?
		
		let url = URL(string: "https://api.covidtracking.com/v1/states/current.json")!
		@Published var users = [User(state: "")]
		
		init() {
				self.can = URLSession.shared.dataTaskPublisher(for: url)
						.map { $0.data }
						.decode(type: [User].self, decoder: JSONDecoder())
						.replaceError(with: [])
						.eraseToAnyPublisher()
						.receive(on: DispatchQueue.main)
						.sink(receiveValue: { users in
								self.users	= users
						})
		}
		
}
struct User: Decodable {
		var state: String
}
Hello
When I tap on my TextField more than 2/4 times the app crashes
Before that I get these errors:
2020-12-29 11:28:10.265525+0100 Nums[1670:295112] Can't find keyplane that supports type 4 for keyboard iPhone-PortraitChoco-NumberPad; using 25889PortraitChocoiPhone-Simple-PadDefault
2020-12-29 11:28:18.778004+0100 Nums[1670:295112] Can't find keyplane that supports type 4 for keyboard iPhone-PortraitChoco-NumberPad; using 25889PortraitChocoiPhone-Simple-PadDefault
2020-12-29 11:28:22.268833+0100 Nums[1670:295112] Can't find keyplane that supports type 4 for keyboard iPhone-PortraitChoco-NumberPad; using 25889PortraitChocoiPhone-Simple-Pad_Default
Then after 2/4 four times tapping on the TextField the app crashes and I get this error
2020-12-29 11:28:22.419634+0100 Nums[1670:295112] [error] precondition failure: attribute being read has no value: 768444
AttributeGraph precondition failure: attribute being read has no value: 768444.
(lldb)
Here is the TextField:
GroupBox {
						HStack {
							 TextField("Have a goal?", text: $saveGoal.bound)
									 .keyboardType(.numberPad)
									Spacer()
						Button(action: {
						UserDefaults.standard.set(self.saveGoal, forKey: "Save")																		UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
																}) {		
																		Text("Save")
																}
												}
										}.padding(.top).padding(.trailing).padding(.leading)
Thank you for your time
Hello
Is there a way to dismiss a decimal Keyboard by tapping (anywhere) on the screen (without putting .onTapGesture {hideKeyboard()} on the NavigationView)
Thank you
Hello
I'm using Measurement(...) to convert watts to femtowatts, but if I convert 1 watts to femtowatts I get 999999999999999.9 instead of 1e+15, I have no idea on how to fix it, any help or ideas, here is the code
:
import SwiftUI
struct PowerView: View {
		
		@State private var inputValue = ""
		
		 let inputUnits = [
				"watts",
				"femtowatts"
		]
		let outputUnits = [
				"watts",
				"femtowatts"
	 ]
		@State private var inputUnitValue = 0
		
		@State private var outputUnitValue = 1
		
		var after: String{
				var input = Measurement(value: 0, unit: UnitPower.watts)
				var output: String = ""
				
				switch inputUnits[inputUnitValue] {
				case "watts": input = Measurement(value: Double(inputValue) ?? 0, unit: UnitPower.watts)
				case "femtowatts": input = Measurement(value: Double(inputValue) ?? 0, unit: UnitPower.femtowatts)
				default: input = Measurement(value: Double(inputValue) ?? 0, unit: UnitPower.watts)
				}
				switch outputUnits[outputUnitValue] {
				case "watts": output = String(describing: input.converted(to: UnitPower.watts))
				case "femtowatts": output = String(describing: input.converted(to: UnitPower.femtowatts))
				default: output = String(describing: input.converted(to: UnitPower.watts))
						
				}
						
				return output
		}
		
				
		var body: some View {
				NavigationView{
						Form{
								Section(header: Text("Enter your Input value")){
												TextField("Have a goal?", text: $inputValue)
								}
								
								Section(header: Text("Input")){
										Picker("Input values", selection: $inputUnitValue){						 	 ForEach(0..<inputUnits.count){ item in
														Text(inputUnits[item])
												}
										}
								}
								
								Section(header: Text("Output")){
										Picker("Output values", selection: $outputUnitValue){
												ForEach(0..<outputUnits.count){ item in
														Text(outputUnits[item])
												}
										}
								}
								
								Section(header: Text("Check your Output value")){
										Text("\(after)")
								}
								
						}
						.navigationBarTitle("Pressure")
				}
		}
		
}
Thank you for your time
(Is there a way to use NumberFormatter with the computed String)
Hello
I'm trying to use a formatter on a String but it is giving me this error
Cannot convert value of type 'String' to type 'NSNumber' in coercion, is there a simple and short way to fix it?
Here is the code
import SwiftUI
struct TemperatureView: View {
		
		@State private var inputValue = ""
		
		 let inputUnits = [
				"celsius [°C]",
				"kelvin [K]",
				"fahrenheit [°F]"
		]
		let outputUnits = [
				"celsius [°C]",
				"kelvin [K]",
				"fahrenheit [°F]"
	 ]
		@State private var inputUnitValue = 0
		
		@State private var outputUnitValue = 1
		
		
		var after: String{
				var input: Measurement<UnitTemperature>
				var output: String = ""
				
				switch inputUnits[inputUnitValue] {
				case "celsius [°C]": input = Measurement(value: Double(inputValue) ?? 0, unit: .celsius)
				case "kelvin [K]": input = Measurement(value: Double(inputValue) ?? 0, unit: .kelvin)
				case "fahrenheit [°F]": input = Measurement(value: Double(inputValue) ?? 0, unit: .fahrenheit)
				default: input = Measurement(value: Double(inputValue) ?? 0, unit: UnitTemperature.celsius)
				}
				switch outputUnits[outputUnitValue] {
				case "celsius [°C]": output = outputFormatter.string(from: input.converted(to: .celsius))
				case "kelvin [K]": output = outputFormatter.string(from: input.converted(to: .kelvin))
				case "fahrenheit [°F]": output = outputFormatter.string(from: input.converted(to: .fahrenheit))
				default: output = String(describing: input.converted(to: UnitTemperature.celsius))
						
				}
						
				return output
		}
		
		@Environment(\.presentationMode) var presentationMode
		let outputFormatter: MeasurementFormatter = {
						let nf = NumberFormatter()
						nf.locale = Locale.current
						nf.usesSignificantDigits = true
						let mf = MeasurementFormatter()
						mf.numberFormatter = nf
						mf.unitOptions = .providedUnit
						return mf
				}()
				
		var body: some View {
				NavigationView{
						Form{
								Section(header: Text("Enter your Input value")){
												TextField("Have a goal?", text: $inputValue)
														.keyboardType(.decimalPad)
								}
								
								Section(header: Text("Input")){
										Picker("Input values", selection: $inputUnitValue){
												ForEach(0..<inputUnits.count){ item in
														Text(inputUnits[item])
												}
										}
								}
								
								Section(header: Text("Output")){
										Picker("Output values", selection: $outputUnitValue){
												ForEach(0..<outputUnits.count){ item in
														Text(outputUnits[item])
												}
										}
								}
								
								Section(header: Text("Check your Output value")){
										Text("\(after as NSNumber, formatter: outputFormatter)")
								}
								
						}
						.navigationBarTitle("Temperature")
						.navigationBarItems(trailing:
																		Button(action: {
																				presentationMode.wrappedValue.dismiss()
																		}) {
																				Image(systemName: "xmark").font(.title).foregroundColor(.blue)
																		}
						)
				}
		}
		
}
The error is at line 80/81
Thank you for your time
Hello
I made a custom Picker View but I don't have any idea on how to change the background color to grey when I press on one of the options
Here is the code:
struct PickerView: View {
		
		var arr: [String] = ["Easy", "Medium", "Hard"]
		var h: CGFloat = 50
		var w: CGFloat = 320
		
		@ObservedObject var input: UserInput
		var body: some View{
				HStack(spacing: 40){
						ForEach(0..<arr.count){ i in
								HStack(spacing: 25){
										Text(arr[i])
												.bold()
												.onTapGesture {
														switch i{
														case i: input.indi = i
														default: return
														}
														print(i)
												}
										if(i < arr.count - 1){
										Divider()
												.frame(height: 25)
										}
								}
						}
				}.padding()
				.clipShape(RoundedRectangle(cornerRadius: 16, style: .continuous))
				.overlay(
						RoundedRectangle(cornerRadius: 16)
								.stroke(Color.gray, lineWidth: 3)
				)
		}
}
class UserInput: ObservableObject {
		@Published var indi: Int = 0
}
Thank you for your time
Hello
I'm trying to fetch some data from a JSON Api, but when I access the properties of my struct it tells me Value of Type "Name Of The Struct" has no member "name of the property"
Any idea on how to fix it
Code:
import SwiftUI
import Combine
struct ContentView: View {
		
		@ObservedObject var networkController = NetworkControllerItalia()
		var gridItemLayout = [GridItem(.flexible()), GridItem(.flexible())]
		
		var body: some View {
				NavigationView{
						ScrollView{
								ForEach(networkController.users, id: \.self){ user in
										GroupBox(label: Text(user.round ?? ""), content: {
												VStack{
														Text(user.team1 ?? "")
												}
										}).padding()
						}
						.navigationTitle("Serie A")
				}
		 }
	 }
}
class NetworkControllerItalia: ObservableObject {
		private var can: AnyCancellable?
		
		let url = URL(string: "https://raw.githubusercontent.com/openfootball/football.json/master/2020-21/it.1.json")!
		//let url = URL(string: "google.com")!
		@Published var users = [UserItalia(matches: [])]
		
		init() {
				self.can = URLSession.shared.dataTaskPublisher(for: url)
						.map { $0.data }
						.decode(type: [UserItalia].self, decoder: JSONDecoder())
						//.replaceError(with: [])
						.eraseToAnyPublisher()
						.receive(on: DispatchQueue.main)
						.sink(receiveCompletion: {completion in
								print(completion)
						}, receiveValue: { users in
								self.users	= users
						})
		}
		
}
struct UserItalia: Decodable, Hashable {
		var matches: [Matches]?
}
struct Matches: Decodable, Hashable {
		var round: String?
		var date: String?
		var team1: String?
		var team2: String?
}
Thank You