Swift - 将数据加载到结构数组中

时间:2016-04-22 05:09:05

标签: arrays swift struct

如何在Swift中将数据加载到结构数组中?

以下是什么语法?

struct TEST {
    var a = 0
    var b = 0
    var c = 0
}

var test: [TEST] = []

// Data to load:
// .a   1,2,3
// .b   4,5,6
// .c   7,8,9

更新1

@pacification很抱歉延迟回复。根据您的更新1,我有这个代码,运行没有错误:

struct TEST {
    var a: Int
    var b: Int
    var c: Int
}

var a: [Int] = [1,2,3]
var b: [Int] = [4,5,6]
var c: [Int] = [7,8,9]

let test: [TEST]

for (index, _) in a.enumerate() {
    TEST(a: a[index], b: b[index], c: c[index])
}

但是,我无法看到如何将值存储在'test'数组中。我错过了什么?

4 个答案:

答案 0 :(得分:0)

也许你应该使用这个

struct test{
        var a:Int
        var b:Int
        var c:Int
        init(a:Int,b:Int,c:Int){
            self.a = a
            self.b = b
            self.c = c
        }
    }

func addSomeData(){
        var array:[test] = []
        array.append(test(a: 1, b: 2, c: 3))
        array.append(test(a: 4, b: 5, c: 6))
        array.append(test(a: 7, b: 8, c: 9))
    }

答案 1 :(得分:0)

我从你的问题中解释的是你想为结构创建一个数组对象并在其中存储数据。 这是一个可能对您有所帮助的示例。

@model Silicus.Finder.Web.ViewModel.EmployeesViewModel
@using Kendo.Mvc.UI;
@using Silicus.Finder.Models.DataObjects;

<link href="~/Content/css/FinderStyle.css" rel="stylesheet" />
@{
    ViewBag.Title = "Employees List";
    var message = TempData["AlertMessage"] ?? string.Empty;

    var importMessage = Session["ImportEmployee"] ?? string.Empty;
    Session["ImportEmployee"] = string.Empty;
}

<link href="~/Content/MyKendoStyle.css" rel="stylesheet" />
<link href="~/Content/css/FinderStyle.css" rel="stylesheet" />

<div class="container-fluid" style="padding-right: 0px;padding-left: 0px;">
    <div id="modal-container" class="k-popup" tabindex="-1" role="dialog" style="border-style: hidden;margin-top:-100px">
        <div class="modal-content" style=" position:fixed !important;z-index:auto;width:97%;">
        </div>
    </div>
</div>

<div id="adv" class="container-fluid" style="margin-left: 3%;">

    <div class="ContainerPanel">

        <div>
            <span style="color:black; font-weight: bold;">Advanced Search</span>
            <div class="header1 pull-right">
                <img src="~/Images/Project/down-arrow.png" style="height:20px; margin-top: -3px;" />
            </div>

            <div class="content">
                <br />
                @using (Html.BeginForm("GetEmployeesByCriteria", "Employee", FormMethod.Post))
                {
                    var model = Model.SearchCriteria;
                    var i = 0;
                    if (i == 0)
                    {
                        @Html.EditorFor(modelItem => model, new { htmlAttributes = new { @class = "form-control" } });
                        ++i;
                    }
                }
            </div>
        </div>

    </div>

</div>

<div id="Grid" class="container-fluid" style="margin: 0.5% 3% 0.5% 3%;">

    @(Html.Kendo().Grid((IEnumerable<Silicus.Finder.Web.ViewModel.EmployeesListViewModel>)Model.Employees)
          .Name("employeeListGrid")
              .Columns(columns =>
            {
                columns.Bound(employee => employee.FullName).Template(@<label>
        @Html.ActionLink(item.FullName, "Details", "Employee", new { id = item.EmployeeCode }, new { @class = "modal-link" })
    </label>
                       );
                columns.Bound(employee => employee.EmployeeCode).Title("Employee Code");
                columns.Bound(employee => employee.Title);
                columns.Bound(employee => employee.HighestQualification).Sortable(false);
                columns.Bound(employee => employee.EmployeeType).Sortable(false);
                columns.Bound(employee => employee.TotalExperienceInMonths);
                columns.Bound(employee => employee.SilicusExperienceInMonths).Sortable(false);

            })
                        .Scrollable(scr => scr.Height(300))
            .Pageable(pageable => pageable
            .Refresh(true)
            .PageSizes(true)
            .ButtonCount(5))
            .Sortable(sortable => sortable.AllowUnsort(false))
    )
</div>


@Scripts.Render("~/bundles/jquery")

<script>
    //Details Modal Popup
    $(function () {
        $('body').on('click', '.modal-link', function (e) {
            e.preventDefault();
            $(this).attr('data-target', '#modal-container');
            $(this).attr('data-toggle', 'modal');
            $('#Grid').toggle();
            $('#adv').toggle();
        });

        $('body').on('click', '.modal-close-btn', function () {
            $('#modal-container').modal('hide');
        });

        $('#modal-container').on('hidden.bs.modal', function () {
            $(this).removeData('bs.modal');
        });

        $('#CancelModal').on('click', function () {
            return false;
        });
    });

    $(document).ready(function () {
        $("#modal-container").hide();
        $("#dialog-import-employee").hide();
    });

    $(window).load(function () {
        $('#moduleHeaderTitleOnDashBoardImage').text("Employees");
        $('#modal-container').hide();
    });

    $(".header1").click(function () {

        $(".ContainerPanel").toggleClass("advance-width");

        $header = $(this);

        $content = $header.next();

        $content.slideToggle(1, function () {           
        });

    });

</script>

如果您希望访问struct数组,则必须在该类中声明该数组。

struct TableData{
let a : Int
let b : Int
let c : Int }

现在向数组添加数据取决于您希望如何在结构数组中存储数据。所以我会告诉你如何访问数组的每个元素。

首先,您创建一个结构对象,一次存储一组结构细节。

var details = [TableData]()

Ofc这只是一个静态分配,我建议你使用循环来获取细节并将它们添加到表数组中。

let data = Tabledata(a:1,b:4,c:7)
details.append(data)

假设您了解字典的循环和概念,您可以获取某些值的值,这将在详细信息数组中创建3个条目。

如果有帮助或需要进一步澄清,请告诉我。

答案 2 :(得分:0)

你应该用这个:

struct Test {
    var a = 0
    var b = 0
    var c = 0
}


var test: [Test] = [
    Test(a: 1, b: 4, c: 7),
    Test(a: 2, b: 5, c: 8),
    Test(a: 3, b: 6, c: 9)
]

请注意,struct有默认init方法(more info here),因此您不需要创建它。

<强>更新

  

我想初始化&#39;测试&#39;结构数组,长度为200

你可以这样做:

var test: [Test] = Array(count: 200, repeatedValue: Test())
  

我想输入&#39; a&#39;,&#39; b&#39;和&#39; c&#39;使用这种语法:   [1,2,3,...]这可能吗?

AHM。你的type abc应该是什么{?}}? Array

更新1

// Data to load:
// .a   1,2,3
// .b   4,5,6
// .c   7,8,9

因此,如果您确定abc相同长度的数组,您可以这样做:

for (index, _) in a.enumerate() {
    Test(a: a[index], b: b[index], c: [index])
}

您的所有数据都将被存储。

答案 3 :(得分:0)

这可能是语义吗? Swift中的结构是通用类型(如类)。它们非常相似但具有相关差异,例如:结构是价值类型。

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html

也许您正在寻找一个词典(键值数据)?

    var arryOfDictionaries = [
      ["a": 1, "b": 2, "c": 3],
      ["a": 4, "b": 5, "c": 6],
      ["a": 7, "b": 8, "c": 9]
    ]

    // Iterate of the array
    for dict in arryOfDictionaries {
      print(dict["a"]) // 1 4 7
      print(dict["b"]) // 2 5 8
    }

    // Add more "rows"
    var oneMore = ["a": 10, "b": 11, "c": 13]
    oneMore["c"] = 12
    arryOfDictionaries.append(oneMore) // Added [10, 11, 12]

如果没有,则@pacification回答是使用结构的最简洁方法。 还要记住,Structures不是类的引用类型,因此您不使用实例,而是复制值(如使用IntStrings时)

如果你没有像上面的例子那样寻找一系列字典,那么一个简单的静态类也是一个很好的选择。

只是我的直觉,但上面的例子看起来不像结构的典型用例。