小编Dja*_*ngo的帖子

Swift/iOS:如何在AnyObject/Any或Pointers的函数中使用inout参数

我正在尝试编写一个函数,它接受一个变量指针和一个描述符/键,并为变量设置一个新值.理想情况下,指针应该是对象或基元,但我也可以使用单独的函数(或其他参数).在我的代码中,我也使用键从数据库中检索新值,但在下面的示例中,我使用虚拟值对其进行了简化,以便可以在操场中轻松使用:

import UIKit

func setValue(inout object: AnyObject, key: String) {
    switch key {
    case "String":
        object = "A String"
    case "UIColor":
        object = UIColor.whiteColor()
    case "Bool":
        object = true
    default:
        println("Unhandled key: \(key)")
    }
}

var string: String = "Default String"
var color: UIColor = UIColor.blackColor()
var bool: Bool = false

setValue(&string, "String")
setValue(&color, "UIColor")
setValue(&bool, "Bool")
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

"无法使用类型'的参数列表调用'setValue'(inout String,key String)'"

我知道我在这里混合了对象和原始.我也尝试将其分解并将它们分成两个函数,但即便失败:

func setValue(inout object: AnyObject, key: String) {
    switch key {
    case "UIColor":
        object = UIColor.whiteColor()
    default:
        println("Unhandled key: …
Run Code Online (Sandbox Code Playgroud)

parameters pointers object ios swift

9
推荐指数
2
解决办法
1万
查看次数

Swift如何在单独的文件中扩展我自己的类

我想做以下事情:

MyClass.swift:

public class MyClass {
    ...
}
Run Code Online (Sandbox Code Playgroud)

MyClass的+ Extension.swift:

extension MyClass {
   ...
}
Run Code Online (Sandbox Code Playgroud)

如果我在同一个文件中都有它可以正常工作,如果它们在单独的文件中,我会收到以下错误:

"Use of undeclared type 'MyClass'"
Run Code Online (Sandbox Code Playgroud)

我已经检查了两个文件的目标成员资格.他们是同一目标的一部分.

任何帮助深表感谢!

categories swift

8
推荐指数
1
解决办法
3817
查看次数

Objective-C:如何检查变量是对象,结构还是其他原语

我想编写一个函数或指令,如NSLog(),它接受任何类型的变量,基元和对象.在那个功能中,我想区分那些.

我知道它对于对象是如何工作的:

- (void)test:(id)object {
    if ([object isKindOfClass:[NSString class]])
        ...
Run Code Online (Sandbox Code Playgroud)

但是如何区分对象与结构甚至整数或浮点数.就像是:

"isKindOfStruct:CGRect" or "isInt" 
Run Code Online (Sandbox Code Playgroud)

例如?

这可能吗?我想,因为你可以将所有内容发送到NSLog(@"......",对象,整数,结构),它必须是可能的吗?

谢谢你的帮助!

编辑

我的最终目标是实现某种多态性.

我希望能够调用我的函数:

MY_FUNCTION(int)
MY_FUNCTION(CGRect)
MY_FUNCTION(NSString *)
...

or [self MYFUNCTION:int]...
Run Code Online (Sandbox Code Playgroud)

并在MY_FUNCTION中

-(void)MYFUNCTION:(???)value {
    if ([value isKindOf:int])
        ...
    else if ([value isKindOf:CGRect])
        ...
    else if ([value isKindOfClass:[NSString class]])
        ...
 }
Run Code Online (Sandbox Code Playgroud)

我知道isKindOf不存在,你甚至不能在原语上执行这样的方法.我也不确定"???" 函数头中的泛型类型"value".

那可能吗?

primitive struct objective-c

7
推荐指数
2
解决办法
7509
查看次数

Objective-C Framework中的Swift类别在运行时未被识别

我确实在Objective-C中创建了一个NSString类别(函数"substringFromString:toString:").它是我自己的框架的一部分,我在我的应用程序中使用.Objective-C框架的组件使用此功能以及我的新Swift应用程序.该框架已经使用了很多次并且工作正常.我已将框架添加到我的Swift项目中,并将NSString类别添加到桥接头文件中.该应用程序编译正常,但只要该类别被库中的某个组件使用,我就会收到以下错误:

-[Swift._NSContiguousString substringFromString:toString:]: unrecognized selector sent to instance 0x7fe6a8d2d550    
Run Code Online (Sandbox Code Playgroud)

如前所述,它是Objective-C库中的Objective-C组件之一,它会抛出此异常.任何帮助深表感谢!

objective-c categories swift

1
推荐指数
1
解决办法
668
查看次数