【问题标题】:Compare String with String value of MVC比较 String 和 MVC 的 String 值
【发布时间】:2021-05-16 04:35:51
【问题描述】:

为了在collectionView 的单元格中查看我的数据,我使用 MVC 架构来保持代码整洁

现在我有一个名为TimeSelModel 的类,它的句柄具有模型函数

它的结构是这样的

struct Section<T> { 
   let model: [T] 
}

struct TimeSelModel {
    let hour: String
    let minute: String
}

let dataSec0 = [
    TimeSelModel(hour: "09", minute: ":30"),
    TimeSelModel(hour: "17", minute: ":00")
]

let dataSec1 = [
    TimeSelModel(hour: "12", minute: ":00"),
    TimeSelModel(hour: "19", minute: ":00")
]

我以这种方式使用这些数据在collectionView中使用它

private var data: [Section<TimeSelModel>] = []

private func fetchData() -> Void {
        data = [Section(model: dataSec0), Section(model: dataSec1)]
    }

func numberOfSections(in collectionView: UICollectionView) -> Int { data.count }
    
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        data[section].model.count }
    
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: TimeSelCell.cellID, for: indexPath) as! TimeSelCell
        
        cell.dataModel = data[indexPath.section].model[indexPath.item]
              
        return cell
    }

现在我需要在一个单独的函数中将string 与我正在使用的模型值进行比较

例如,我需要将 string 与模型值中的值 "12" 进行比较

let dataSec0 = [
        TimeSelModel (hour: "09", minute: ": 30"),
        TimeSelModel (hour: "17", minute: ": 00")
    ]
    
let dataSec1 = [
        TimeSelModel (hour: "12", minute: ": 00"),
        TimeSelModel (hour: "19", minute: ": 00")
    ]

将它放入我的控制器的最佳和最干净的方法是什么?

【问题讨论】:

  • 这个问题很不清楚。比较什么? hourminute 或两者兼而有之?比较相等还是大于还是小于?过滤对象还是找到第一个?结果应该是什么?请编辑问题并添加更多信息。
  • @vadian 让我举一个更清楚的例子。简而言之,我在 String 中得到当前时间,结果是 "17:00" 。此时我需要知道我的collectionView 中是否存在“17:00”并选择显示“17:00”的单元格
  • @vadian 我不知道是否正确使用例如data[section].model[0].hour我想知道是否有正确的方法来解决问题
  • 我的 collectionView 在两个部分中都有 2 个部分,时间根据逻辑进行划分.. 这就是为什么使用 Section 以特定方式显示数据的原因

标签: ios swift string model-view-controller model


【解决方案1】:

由于您在问题中有一个示例,然后在 cmets 中有另一个示例,因此这里有两种方法可以在您的 data 数组中获取特定时间的索引。

let hourValue = "12"
if let index = data.firstIndex { section in section.model.contains { $0.hour == hourValue } } {
    let section = data[index]
    //...
}

let timeValue = "17:00"
if let index = data.firstIndex { section in section.model.contains { $0.time == timeValue } } {
    let section = data[index]
    //...
}

最后一个示例使用了我添加到 TimeSelModel 的计算属性

struct TimeSelModel {
    let hour: String
    let minute: String

    var time: String {
        "\(hour):\(minute)"
    }
}

请注意,它添加了一个“:”,因为我认为在分钟字符串中包含冒号不是一个好主意,而不是“:00”或“:00”,它应该只是“ 00”。 (甚至可以争辩说小时和分钟应该是整数,但这超出了这个答案的范围)

另请注意,此答案基于我对 Section 类型的解释。

【讨论】:

  • 你好,我现在正在喂我的儿子????如果我还没有就你的回答给你任何反馈,请原谅我……我一说完,我就试着理解你的问题也许如果我有问题可以联系你??再次抱歉,感谢您的回答.. 很多时候我在理解如何设置我的代码方面仍然有很多困难,如果我的问题有时看起来很愚蠢,我很抱歉?我会尽快与您联系
  • 所以我正在实施你的建议,它似乎有效,但我只有一个问题......它总是返回数组的第一个值..我肯定做错了什么......也许如果你有时间我可以在聊天中更好地解释代码以避免在问题中创建太多的 cmets
  • 相反,我纠正自己..它并没有给我任何价值,但正如我之前所说的,问题是我,而不是你的建议
  • 简而言之,根据您的建议,我收到了我的部分中的项目数.. 相反,我试图找到承载值“17:00”的项目以选择单元格
  • 我也想交流一下“Section”是什么struct Section&lt;T&gt; { let model: [T] }
【解决方案2】:

字符串与 myTime.hour &lt; "12" 的 unicode 值相当。

这意味着"0" &lt; "1" 为真

但是"2" &lt; "12" 是假的

在您的情况下,您应该将字符串与 Foundation 的函数 https://developer.apple.com/documentation/foundation/nsstring/1408732-compare 进行比较 并给出options 参数.numerichttps://developer.apple.com/documentation/foundation/nsstring/compareoptions/1415530-numeric

switch myTime.hour.compare("12", options: [.numeric]) {
    case .orderedAscending:
        // myTime.hour < "12"

    case .orderedSame:
        // myTime.hour == "12"

    case .orderedDescending:
        // myTime.hour > "12"
}

但我建议使用 Int 或 TimeInterval 更改您的模型,并使用将您的模型转换为您想要的可读字符串的函数

【讨论】:

  • 我需要根据我的例子理解
  • 所以问题不仅在于比较字符串,还在于检索模型、检索值、使用 MVC 模式、使用 UIKit、使用 swift……这不是 IMO 的好问题
  • 在问题中我明确指出我需要将字符串与 MVC 模型的字符串进行比较
猜你喜欢
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-26
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
相关资源
最近更新 更多