我正在尝试编写一个函数,它接受一个变量指针和一个描述符/键,并为变量设置一个新值.理想情况下,指针应该是对象或基元,但我也可以使用单独的函数(或其他参数).在我的代码中,我也使用键从数据库中检索新值,但在下面的示例中,我使用虚拟值对其进行了简化,以便可以在操场中轻松使用:
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) 我想做以下事情:
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)
我已经检查了两个文件的目标成员资格.他们是同一目标的一部分.
任何帮助深表感谢!
我想编写一个函数或指令,如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".
那可能吗?
我确实在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组件之一,它会抛出此异常.任何帮助深表感谢!
swift ×3
categories ×2
objective-c ×2
ios ×1
object ×1
parameters ×1
pointers ×1
primitive ×1
struct ×1