所以我已经创建了函数并且它做了一些事情,但是如果参数类型不同,我希望它做其他事情,例如:
func (parameter: unknownType){
if(typeof parameter == Int){
//do this
}else if(typeof parameter == String){
//do that
}
}
我已经用javascript或其他编程语言完成了这项工作,但我不知道如何在swift中完成此操作
我已经创建了一个函数,该函数接受一个参数UITextField并使用约束将其居中
现在我想把我的按钮放在中心,但由于按钮不是UITextField类型它不起作用,所以有没有办法告诉函数在UIButton上做同样的事情?
答案 0 :(得分:2)
使用重载:
class Example
{
func method(a : String) -> NSString {
return a;
}
func method(a : UInt) -> NSString {
return "{\(a)}"
}
}
Example().method("Foo") // "Foo"
Example().method(123) // "{123}"
答案 1 :(得分:0)
它可以 示例代码:
func temFunc(obj:AnyObject){ if let intValue = obj as? Int{ print(intValue) }else if let str = obj as? String{ print(str) } }
答案 2 :(得分:0)
您可以使用Any
和向下转发:
func foo(bar: Any){
switch(bar) {
case let a as String:
/* do something with String instance 'a' */
print("The bar is a String, bar = " + a)
case let a as Int:
/* do something with Int instance 'a' */
print("The bar is an Int, bar = \(a)")
case _ : print("The bar is neither an Int nor a String, bar = \(bar)")
}
}
/* Example */
var myString = "Hello"
var myInt = 1
var myDouble = 1.5
foo(myString) // The bar is a String, bar = Hello
foo(myInt) // The bar is an Int, bar = 1
foo(myDouble) // The bar is neither an Int nor a String, bar = 1.5
答案 3 :(得分:0)
相当于Javascript代码:
func doSomething(parameter: Any?) {
if let intValue = parameter as? Int {
// do something with the int
} else if let stringValue = parameter as? String {
// do something with the string
}
}
但要注意,这种方法会让你失去类型安全性,这是Swift最有用的功能之一。
更好的方法是声明一个由您希望允许传递给doSomething
的所有类型实现的协议:
protocol MyProtocol {
func doSomething()
}
extension Int: MyProtocol {
func doSomething() {
print("I am an int")
}
}
extension String: MyProtocol {
func doSomething() {
print("I am a string")
}
}
func doSomething(parameter: MyProtocol) {
parameter.doSomething()
}
doSomething(1) // will print "I am an int"
doSomething("a") // will print "I am a string"
doSomething(14.0) // compiler error as Double does not conform to MyProtocol
答案 4 :(得分:-1)
检查此解决方案:
https://stackoverflow.com/a/25528882/256738
您可以传递一个对象AnyObject
并检查该类,以了解它是什么类型的对象。
<强>更新强>
好点@Vojtech Vrbka
这是一个例子:
let x : AnyObject = "abc"
switch x {
case is String: println("I'm a string")
case is Array: println("I'm an Array")
// Other cases
default: println("Unknown")
}