微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

List 中的可重用性支持 - SwiftUI

如何解决List 中的可重用性支持 - SwiftUI

我目前正在开发一个使用 SwiftUI 的项目。我试图使用 List 显示一个包含 10 个项目的列表。

问题:List 是否像 UITableview 一样支持可重用性?

我浏览了多个帖子,所有帖子都说 List 支持可重用性。 Does the List in SwiftUI reuse cells similar to UITableView?

但该项目的内存映射说明了其他内容List 中的所有视图都是一次性创建的,不会重复使用。

enter image description here

编辑:

这是我如何创建 List

List {
    Section(header: TableHeader()) {
        ForEach(0..<10) {_ in
            TableRow()
        }
    }
}

TableHeaderTableRow 是创建的自定义视图。

有人可以澄清一下吗?

解决方法

List 实际上为可重用标识符提供了与 UITableView 相同的技术。你的代码使它像一个滚动视图。 正确的做法是提供项目作为迭代数据。


totalWorkingHours() {
    print("working hours");
    var totalWorkingMin;
    var totalWorkingSec;  
    var totalWorkingHour;
    var timeInHoursSplit;
    var timeOutHoursSplit;
    var timeInHours0;
    var timeOutHours0;
    List timeInHours;
    List timeOutHours;
    var inHour;
    var outHour;
    var inMin;
    var outMin;
    var inSec;
    var outSec;
    var flagMin = false;
    var flagSec = false;

    var defaultIn = " 00:00:00 PM";
    var defaultOut = " 00:00:00 PM";

    var data = {};

    //here i am getting the time in and time out values and using api if in case user logout,and spliting it to get the hours,min and sec
    if(workinghours=="0" && getapitimeout==""){
      print("11");
      timeInHoursSplit = defaultIn.split(' '); //18:35:00 PM
      timeOutHoursSplit = defaultOut.split(' ');
    }
    else if (workinghours == "0" && getTimeInStatus == true) {
      print("12");
      timeInHoursSplit = gettimeinvalue.split(' '); //18:35:00 PM
      timeOutHoursSplit = getapitimeout.split(' ');
    }
    //if logged in,did timein and timeout at once.
    else if(gettimeinworkinghours=="0" && getapitimeout!=""){
      print("13");
      print(getapitimein);
      print(getapitimeout);
      timeInHoursSplit = getapitimein.split(' ');
      timeOutHoursSplit = getapitimeout.split(' ');
    } 
    //if not time in and time out yet
    else {
      print("14");
      print(getapitimeout);
      timeInHoursSplit = defaultIn.split(' ');
      timeOutHoursSplit = defaultOut.split(' ');
    }
    print("1");
    print(timeInHoursSplit); //[18:35:00,PM]

    timeInHours0 = timeInHoursSplit[1]; //18:35:00
    print("2");
    print(timeInHours0);
    timeOutHours0 = timeOutHoursSplit[1];

    timeInHours = timeInHours0.split(':'); //[18,35,00]
    print(timeInHours);

    timeOutHours = timeOutHours0.split(':');

    inHour = timeInHours[0];
    outHour = timeOutHours[0];

    inMin = timeInHours[1];
    outMin = timeOutHours[1];

    inSec=timeInHours[2];
    outSec=timeOutHours[2];

   // here i am calculating the hours
    if (int.parse(inHour) > int.parse(outHour)) {
      totalWorkingHour = int.parse(inHour) - int.parse(outHour);
      print(totalWorkingHours);
    } else {
      totalWorkingHour = int.parse(outHour) - int.parse(outHour);
      print(totalWorkingHours);
    }

// here i am calculating the min
    if (inMin != outMin) {
      if (int.parse(outMin) > int.parse(inMin)) {
        totalWorkingMin = int.parse(outMin) - int.parse(inMin);
        flagMin = true;
      } else if (int.parse(inMin) > int.parse(outMin)) {
        totalWorkingMin = int.parse(inMin) - int.parse(outMin);
        flagMin = true;
      }
    } else if (inMin == outMin) {
      totalWorkingMin = int.parse(outMin) - int.parse(inMin);
      flagMin = true;
    }

// here i am calculating the sec
    if (inSec != outSec) {
      if (int.parse(outSec) > int.parse(inSec)) {
        totalWorkingSec = int.parse(outSec) - int.parse(inSec);
        flagSec = true;
      } else if (int.parse(inSec) > int.parse(outSec)) {
        totalWorkingSec = int.parse(inSec) - int.parse(outSec);
        flagSec = true;
      }
    } else if (inSec == outSec) {
      totalWorkingSec = int.parse(outSec) - int.parse(inSec);
      flagSec = true;
    }


    //// here i am getting the totalworkinghours by concatenating the hours,min and sec
    if (flagMin == true && flagSec==true) {
      print("1 output");
      totalTime = totalWorkingHour.toString() +":" +totalWorkingMin.toString() +":"+totalWorkingSec.toString();
      print(totalTime);        
      return totalTime;  
    }

    //cond 2
    else if (flagMin == false && flagSec==false){
      print("2 output");
      totalTime = totalWorkingHour.toString() +":" +inMin.toString() + ":" +inSec.toString();    
      return totalTime;    
    } 

    //cond 3
    else if (flagMin == false && flagSec == true) {
      print("3 output");
      totalTime = totalWorkingHour.toString() +":" +inMin.toString() ;
     
      return totalTime;


    } 

    //cond 4
    else if (flagMin == true && flagSec == false) {
      print("4 output");
      totalTime = totalWorkingHour.toString() +":" +totalWorkingMin.toString() +":" +inSec.toString();
     
      return totalTime;

    }
  }

struct Item: Identifiable {
    var id = UUID().uuidString
    var name: String
}

查看层次结构调试器只显示内存中的 17 行 enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。