困りごと
以下のコードの最初に宣言しているstatic変数6つ(A〜F)のうち、必ず3つ目の値が欠如する問題が起きており困っています。
3つ毎ではなく、3つ目のみです。
2019/12/24追記
現象はコード内最後に記述されている、PostNewRequest関数内のqueryParameters内で使う際に起きます。
■現象イメージ
以下の場合、Cに値渡しされない。
queryParameters = [ "sample" : [ [ "keyA": A, "keyB": B, "keyC": C], [ "keyA": A, "keyD": D, "keyE": E], [ "keyA": A, "keyB": F] ] ]
以下の場合、Aに値渡しされない。
queryParameters = [ "sample" : [ [ "keyA": A, "keyB": F], [ "keyA": A, "keyB": B, "keyC": C], <-ここ [ "keyA": A, "keyD": D, "keyE": E] ] ]
###やったこと
変数viewzDidLoadにて初期値を入れましたが、3つ目だけ初期値も入りません。
また、変数の順番も関係なく、変数の記述順を変えても必ず3つ目のみ値が入りません。(その他はちゃんと入る)
計算式でforced unwrapをしているのが悪さをしているのかと思いましたが、sliderを使わなかった場合も同様の現象が起きます。
現象確認方法
sendRequest関数にBrakePointを設定し、関数実行を途中で止めました。
その上でqueryParameters内の該当する変数の値を確認しています。
インターフェイス外観
swift
1import UIKit 2import Foundation 3import SwiftyJSON 4import CryptoSwift 5 6class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { 7 static var A: String = "" 8 static var B: String = "" 9 static var C: String = "" 10 static var D: String = "" 11 static var E: String = "" 12 static var F: String = "" 13 14 override func viewDidLoad() { 15 super.viewDidLoad() 16//現象確認用にここで初期値を宣言してもqueryParameters内の3つ目の値が入らない 17 ViewController.A = "文字列" 18 ViewController.B = "1000" 19 ViewController.C = "2000" 20 ViewController.D = "1900" 21 ViewController.E = "900" 22 ViewController.F = "950" 23 } 24//以下でスライダーで調整した値と「highMaximum」「lowMaximum」で入力した値をかけて元の値に足す 25//以下の.floor(nearest:0.5)はFloatにextensionをつけて数字の丸め方を変えています 26 @IBOutlet weak var inputA: UITextField! 27 @IBOutlet weak var highMaximum: UITextField! 28 @IBOutlet weak var lowMaximum: UITextField! 29 @IBOutlet weak var highNum: UILabel! 30 @IBAction func highRangeSelector(_ sender: UISlider) {//Sliderは0〜1 31 let highNumCalc = Float(inputA.text!)! + Float(highMaximum.text!)! * sender.value 32 highNum.text = String(highNumCalc.floor(nearest:0.5)) 33 ViewController.C = String(highNumCalc.floor(nearest:0.5)) 34 let highForD = highNumCalc - 100 35 ViewController.D = String(highForD.floor(nearest: 0.5)) 36 ViewController.B = inputA.text!//念押しでsliderを調整する毎にBに値を入れておく 37 } 38 @IBOutlet weak var lowNum: UILabel! 39 @IBAction func lowRangeSelector(_ sender: UISlider) {//Sliederは-1〜0 40 let lowNumCalc = Float(inputA.text!)! + Float(lowMaximum.text!)! * sender.value 41 lowNum.text = String(lowNumCalc.floor(nearest:0.5)) 42 ViewController.E = String(lowNumCalc.floor(nearest:0.5)) 43 let lowForF = lowNumCalc + 50 44 ViewController.F = String(lowForF.floor(nearest: 0.5)) 45 ViewController.B = inputA.text!//念押しでsliderを調整する毎にBに値を入れておく 46 } 47//このボタンが押されると、PostNewRequestクラス内の変数でbuildURLRequestが実行される 48 @IBOutlet weak var sendButton: UIButton! 49 @IBAction func sendRequest(_ sender: Any) { 50 let post = PostNewRequest() 51// (省略) 52 } 53 54// To post 55 final class PostNewRequest { 56// (省略) 57 static var queryParameters: [String: Any] = [ここでstatic変数を使いたい] 58// (省略) 59 func buildURLRequest() {} 60 init() {} 61 } 62} 63
回答2件
あなたの回答
tips
プレビュー