【问题标题】:Converting String array into Int Array Swift将字符串数组转换为 Int 数组 Swift
【发布时间】:2016-01-27 10:26:17
【问题描述】:

String 值转换为数组中的Int 值后,当我打印到日志时,我得到的只是:[0, 0, 0, 0],而输出应该是:["18:56:08", "18:56:28", "18:57:23", "18:58:01"] (不带引号和: 冒号)。

我在将值添加到字符串数组之后直接转换字符串数组。我假设我没有在正确的时间转换值,或者我的方法放置错误,这就是我得到0 0 0 0 输出的原因。

这是我的 ViewController 代码:

class FeedTableViewController: UITableViewController {


var productName = [String]()
var productDescription = [String]()
var linksArray = [String]()
var timeCreatedString = [String]()
var minuteCreatedString = [String]()



var intArray = Array<Int>!()

override func viewDidLoad() {
    super.viewDidLoad()


    var query = PFQuery(className: "ProductInfo")

    query.findObjectsInBackgroundWithBlock ({ (objects, error) -> Void in

    if let objects = objects {

        self.productName.removeAll(keepCapacity: true)
        self.productDescription.removeAll(keepCapacity: true)
        self.linksArray.removeAll(keepCapacity: true)
        self.timeCreatedString.removeAll(keepCapacity: true)

        for object in objects {

            self.productName.append(object["pName"] as! String)

            self.productDescription.append(object["pDescription"] as! String)

            self.linksArray.append((object["pLink"] as? String)!)


// This is where I'm querying and converting the date: 



var createdAt = object.createdAt
            if createdAt != nil {

            let date = NSDate()
            let dateFormatter = NSDateFormatter()
            dateFormatter.dateFormat =  "MM/dd/YYY/HH/mm/ss"
            let string = dateFormatter.stringFromDate(createdAt as NSDate!)

            var arrayOfCompontents = string.componentsSeparatedByString("/")


            self.timeCreatedString.append("\(arrayOfCompontents[0]) \(arrayOfCompontents[1]) \(arrayOfCompontents[2])")

            self.minuteCreatedString.append("\(arrayOfCompontents[3]):\(arrayOfCompontents[4]):\(arrayOfCompontents[5])")

                self.intArray = self.minuteCreatedString.map { Int($0) ?? 0}

                print("INT ARRAY \(self.intArray)")

                print(self.minuteCreatedString.map { Int($0) ?? 0})

                print(self.minuteCreatedString)


            }

            self.tableView.reloadData()


            }


        }


    })


  }

当我在 viewDidLoad 方法中的另一个 ViewController 中尝试此操作而没有发生解析/查询时,我得到了正确的输出:转换后的 Ints 数组。我假设存在 whenwhere 我将字符串转换为 Ints 的问题。

我应该以什么顺序/在哪里将字符串数组转换为整数数组?我应该从 Date 转换为 Int 吗?如果是这样,我该怎么做?我做错了什么吗?我很困惑....

非常感谢任何帮助!

【问题讨论】:

    标签: arrays string swift int


    【解决方案1】:

    如果你有一个NSDate 对象,你可以使用日期格式化程序创建日期字符串

    let createdAt = NSDate() // or give date object
    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat =  "HH:mm:ss"
    let string = dateFormatter.stringFromDate(createdAt) // "18:56:08"
    

    或者如果您想要小时、分钟和秒的整数值,请使用NSDateComponents

    let comps = NSCalendar.currentCalendar().components([.Hour, .Minute, .Second], fromDate: createdAt)
    let hour = comps.hour
    let minute = comps.minute
    let seconds = comps.second
    let intArray = [hour, minute, second]
    

    【讨论】:

    • 对于第一个示例,我收到一条错误消息:Cannot convert value of type 'NSDate?!' to expected argument type 'NSDate 它只能像这样工作:let string = dateFormatter.stringFromDate(createdAt as NSDate!) 第二个示例)我该如何处理该代码?我还在用var createdAt = object.createdAtif createdAt != nil {查询吗?我在哪里将其转换为 Int 然后将其设置为倒计时?我不明白我应该在哪里以及如何格式化代码以在数组中获取一个 Int 以便我可以在我的计时器中使用它。
    • createdAt 显然是一个 NSDate 对象。第二个示例从日期对象中提取hourminutesecond 信息作为Int 值。这比创建日期字符串并将其转换为所需格式更有效。
    • 我将值打印为 Ints,但现在我无法访问它们并从第二个索引(秒)开始倒计时,因此在达到 0 后依次倒计时分钟和小时。以下是改进代码的要点:gist.github.com/rinyfo4/9456343799c07c168812 关于如何使它工作的任何想法?
    • 我可能更容易将 H:M:S 转换为秒 (H * 3600) + (M * 60) + S 然后减少值并将其转换回 H:M:S 以显示。所有这些也可以通过NSDateFormatter 和用作基准日期的适当偏移量来完成
    • 在哪里转换?
    猜你喜欢
    • 2012-03-26
    • 1970-01-01
    • 2015-09-09
    • 2021-12-21
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 2016-11-20
    相关资源
    最近更新 更多