问题描述
我目前正在开发一个使用 SwiftUI 的项目。我试图使用 List
显示一个包含 10 个项目的列表。
问题:List
是否像 UITableview
一样支持可重用性?
我浏览了多个帖子,所有帖子都说 List
支持可重用性。
Does the List in SwiftUI reuse cells similar to UITableView?
但该项目的内存映射说明了其他内容。 List
中的所有视图都是一次性创建的,不会重复使用。
编辑:
这是我如何创建 List
List {
Section(header: TableHeader()) {
ForEach(0..<10) {_ in
TableRow()
}
}
}
TableHeader
和 TableRow
是创建的自定义视图。
有人可以澄清一下吗?
解决方法
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
}