草庐IT

swift - 映射和拆分数组中的值

我如何映射数组并在同一个闭包中,将值拆分为两个变量?此代码有效,但是,我只想使用一个闭包,而不是三个。letarray=[1,2,3,4]leta=array.map{v->(Int,Int)in(v*2,v*10)}letx=a.map{$0.0}lety=a.map{$0.1} 最佳答案 这里有一个可能不太可读,但可以说是更函数式的解决方案(不可变数组,没有for-each循环,纯函数只作用于它的输入并且不会在闭包外产生副作用):letarray=[1,2,3,4]let(x,y)=array.reduce(([Int](),[

arrays - 将 C 字符数组转换为字符串

我有一个与C库互操作的Swift程序。这个C库返回一个内部有char[]数组的结构,如下所示:structrecord{charname[8];};定义已正确导入Swift。但是,该字段被解释为8个Int8元素的元组(类型为(Int8,Int8,Int8,Int8,Int8,Int8,Int8,Int8)),我不知道如何使用Swift将其转换为String。没有接受Int8元组的String初始化器,并且似乎不可能获得指向元组第一个元素的指针(因为类型可以是异质的,这并不奇怪)。现在,我最好的想法是创建一个微型C函数,它接受一个指向结构本身的指针,并将name作为char*指针而不是数

Swift:同时将元组解包为可变和不可变变量

我有一个Swift函数,它返回一个包含两个值的元组。第一个值通常但不总是用作调用者中一段可变状态的“更新”版本(我知道我也可以使用inout代替元组,但这使得它在保留新状态的同时保持旧状态更烦人)。第二个值是由函数生成的通常不可变的返回值,它无意覆盖任何现有的可变状态。从概念上讲,用法如下所示:varstate=//initialize(state,retval1)=process(state)(state,retval2)=process(state)(state,retval3)=process(state)这里的问题显然是retval1,retval2,和retval3永远不会声

templates - Swift:静态 "append"到元组类型

我正在编写的Swift库中有一个模板化结构。这个结构有两个特点:每个结构都“包装”或“代表”另一种任意类型。Foo包装T这些结构可以“组合”形成第三个结构,其表示类型应该是前两个结构的“组合”(阅读:元组)。在另一个世界,如果fooA:Foo和fooB:Foo,然后fooA+fooB应该是Foo类型.当只有两种类型可以组合时,这就足够了,但是当你链接这个组合操作时,你开始得到嵌套的元组,这不是我想要的。例如,在下面的代码中:leta=Foo(/*initialize*/)letb=Foo(/*initialize*/)letc=Foo(/*initialize*/)letd=a+b//

arrays - 如何在 Swift 中使用 for 循环遍历元组数组

我有一个元组数组定义为:varpoints2D:Array=[(1,1),(2,3),(4,3),(9,5),(3,3),(7,6),(5,6)]当尝试像这样经历它时:funcfoo(){for(x,y)inpoints2D{}}我收到此错误消息:'τ_0_0'isnotconvertibleto'(@lvalueArray,@lvalueArray)'这是什么意思,我做错了什么? 最佳答案 points2D的类型不是Array,而是Array,所以让Swift推断类型:varpoints2D=[(1,1),(2,3),(4,3),

arrays - 在 Swift 中读取 JSON 中的嵌套数组和元组

我有一些数据是通过JSON传递的,它是一个包含数组的元组数组,我无法从中提取数据。我尝试转换为不同的类型,但唯一有效的是[Any]并且我无法进一步分解它。JSON:{...//stuffthatIcaneasilyread,like"WIDTH":33,..."WIDTHS_ROI_PAIRS":[[80,[0,0,200,160]],[145,[0,240,100,60]],[145,[100,240,100,60]]]}它要进入的结构:structWidthRoiPair:Codable{letwidth:Intletroi:[Int]}我想做的(不行,当作伪代码):letwidt

swift - 如果值是 `let` 常量,为什么我只能直接使用元组名称附加一个元组数组——Swift

这是我正在谈论的例子:typealiasSomeTuple=(string:String,int:Int)vartupleArray:[SomeTuple]=[]//Fails//tupleArray.append(string:"Hello",int:42)//Worksletstring="Hello"letnum=42tupleArray.append(string:string,int:num)//Fails//varvarString="HiAgain"//varvarNum=234//tupleArray.append(string:varString,int:varNum

swift - Swift 中泛型变量的解决方法

所以我有一个类型别名元组publictypealiasMyTuple=(key:T,value:String)在我的ViewController中,我想声明一个具有通用数据类型的MyTuple数组,因为我还不知道键的类型。然而,来自this在Swift中不可能有泛型变量。还有其他解决方法如下,但我都不喜欢它们中的任何一个。谁有更好的想法?classViewController:UIViewController{vararray1=[MyTuple]()//compileerrorofcoursevararray2=[MyTuple]()//nopointasI'duse`Any`for

swift - 单元素括号表达式/元组与括号的常用用法

抱歉,如果这是微不足道的-我对swift还很陌生,实际上我只看了几分钟的语言指南+引用。据我了解像(2,3)这样的括号表达式是用来构造一个元组的,而(2)是一个类型为单元素的元组(整数)。但是如果在表达式(2+4)*5中经常使用像(2+4)这样的括号会发生什么?这仍然是(Int)类型的元组乘以Int吗? 最佳答案 来自Types在Swift书中:Ifthereisonlyoneelementinsidetheparentheses,thetypeissimplythetypeofthatelement.Forexample,thet

arrays - 对元组数组求和

我有一个这样定义的元组数组:varstringsWithLengthsArray:[(someString:String,someStringLength:Int)]=[]我已经向这个数组附加了一些元组。我想对数组中每个元组的someStringLength元素求和,并认为最好的方法是使用stringsWithLengthsArray.reduce方法,但我无法弄清楚语法。对someStringLength元素求和的最佳方法是什么? 最佳答案 我最喜欢这种方式:lettotal=stringsWithLengthsArray.red