草庐IT

objective-c - 强制 Objective-C 方法返回 `id` 和 inout NSError 以桥接到可选返回

考虑这个Objective-C类:@interfaceTestAPI:NSObject-(nullableid)aNullableMethod;-(nullableid)aNullableMethodWithError:(inoutNSError**)error;@end我正在使用TestAPI作为抽象基类,并希望在Swift中继承它。Swift将此代码桥接到如下所示(即对应菜单->Swift4.2接口(interface)):openclassTestAPI:NSObject{openfuncaNullableMethod()->Any?openfuncaNullableMethod

ios - 无法将不可变值作为 inout 参数 : literals are not mutable, 传递,为什么?

我想创建一个函数来交换2个变量!但是对于新的swift,我不能使用“var”....importUIKitfuncswapF(inouta:Int,inoutwithb:Int){print("x=\(a)andy=\(b)")(a,b)=(b,a)print("Newx=\(a)andnewy=\(b)")}swapF(&5,with:&8) 最佳答案 文字不能作为inout参数传递,因为它们本质上是不可变的。改用两个变量:vari=5varj=8swapF(a:&i,with:&j)此外,对于最后的Swift3快照之一,inou

ios - 'NSError' 在 Swift 中不能转换为 '@lvalue inout $T9'

所以我试图在我的SwiftiOS应用程序中的SLRequest对象上使用performRequestWithHandlerblock,但我无法处理NSError对象。这就是我的代码的样子:posts.performRequestWithHandler({(response:NSData!,urlResponse:NSHTTPURLResponse!,error:NSError!)inself.data=NSJSONSerialization.JSONObjectWithData(response,options:NSJSONReadingOptions.MutableLeaves,er

Swift:总是在 inout 上复制?

我编写了一个用于序列化模型数据的简单库,后来意识到我在只读取数据时正在写入数据。我能够将问题减少到以下Playground片段:classFoo{init(){name="test"}varname:String{didSet{print("settingname:\(self.name)")}}}funcmap(inoutfoo:String){print("writingvalue:\(foo)")}varfoo:Foo=Foo()map(&foo.name)结果(对我来说)出乎意料:writingvalue:testsettingname:test我重新阅读了关于inout参数的

ios - Swift 中的 "mutating"函数和 "inout"参数有什么区别吗?

根据Swift文档,mutating和inout关键字都用于修改函数内的值类型。“mutating”和“inout”之间有什么区别,以及我们需要使用它们中的任何一个的任何特殊情况。 最佳答案 mutating标记一个方法。inout标记一个参数。它们是完全不同的东西。标有mutating的方法可以改变self即设置self的属性,重新分配self等。structFoo{varfoo:Intmutatingfuncmutate(){foo+=1//thisismutatingself}}标有inout的参数基本上成为var变量,而不是

ios - Swift:在转义被调用函数的闭包中捕获inout参数

我试图编写一个“编辑器”类,它可以保留对不同对象上的属性的引用以供以后修改。我首先编写编辑器类以接收一个用于读取的闭包和一个用于写入的闭包。这奏效了。然后我尝试通过(inout)引用传递有问题的参数,然后从中生成getter/setter对。这没有用。Swift文档确实说(释义)Swift计算出何时复制,何时不复制。我认为我反对这种限制的不可预测性,但我认为我会提出同样的问题。或者,是否可以为单独的getter和setter获取柯里化(Currying)函数?我的代码是:classSomeModel:Printable{vara:Stringinit(a:String){self.a=

ios - swift 错误 : '&' used with non-inout argument of type 'UnsafeMutablePointer'

我正在尝试从中转换以下Objective-C代码(source)-(CGRect)dimensionsForAttributedString:(NSAttributedString*)asp{CGFloatascent=0,descent=0,width=0;CTLineRefline=CTLineCreateWithAttributedString((CFAttributedStringRef)asp);width=CTLineGetTypographicBounds(line,&ascent,&descent,NULL);//...}进入swift:funcdimensionsFo

cocoa - Swift 和 inout 参数中的闭包捕获变量

我注意到当一个变量被Swift中的闭包捕获时,闭包实际上可以修改值。这对我来说似乎很疯狂,而且是获得可怕错误的绝佳方法,特别是当同一个var被多个闭包捕获时。varcapture="Hellocaptured"funcg(){//thisshouldn'tbepossible!capture=capture+"!"}g()capture另一方面,还有inout参数,它允许函数或闭包修改其参数。inout有什么用,连捕获的变量都已经可以不受惩罚地修改了??!!只是想了解这背后的设计决策...... 最佳答案 从外部范围捕获的变量不是例

arrays - 不确定这种 inout 场景是如何安全的,因为数组在返回时会失效

下面的代码没有崩溃,但鉴于可用的“有限”文档,我无法解释原因。funcfoo(inouta:[Int],inoutb:Int){a=[]b=99}vararr=[1,2,3]//confusion:wheredoesthe"out"ofbgoto?//storageforawasalreadycleared/invalidatedfoo(&arr,b:&arr[2])print(arr)//arrisempty 最佳答案 我相信这就是正在发生的事情。当你分配a=[]您正在将a指向一个新数组。原始数组仍然存在于内存中,当您这样做时:b

Swift 4 编程语言,inout 参数不适用于函数类型作为参数

这是swift文档中的示例代码。我正在学习swift语言,我看到函数类型作为参数,示例代码没有inout关键字。但是我试图将它与inout参数一起使用,但下面的示例没有按预期工作。https://docs.swift.org/swift-book/LanguageGuide/Functions.html(函数类型作为返回类型)//FunctionTypesasReturnTypesfuncstepForward(_input:inoutInt)->Int{returninput+1}funcstepBackward(_input:inoutInt)->Int{returninput-1