小编raf*_*lio的帖子

连接UIButton关闭?(斯威夫特,目标行动)

我想将一个UIButton连接到一段代码 - 从我发现的,在Swift中执行此操作的首选方法仍然是使用该addTarget(target: AnyObject?, action: Selector, forControlEvents: UIControlEvents)函数.这使用该Selector结构可能是为了向后兼容Obj-C库.我想我理解@selectorObj-C 的原因- 能够引用一个方法,因为在Obj-C方法中不是一流的值.

但在Swift中,函数是一流的值.有没有办法将UIButton连接到闭包,类似于:

// -- Some code here that sets up an object X

let buttonForObjectX = UIButton() 

// -- configure properties here of the button in regards to object
// -- for example title

buttonForObjectX.addAction(action: {() in 

  // this button is bound to object X, so do stuff relevant to X

}, forControlEvents: UIControlEvents.TouchUpOutside)
Run Code Online (Sandbox Code Playgroud)

据我所知,上述目前是不可能的.考虑到Swift看起来像是一个非常实用的功能,为什么会这样?这两个选项可以明显共存,以实现向后兼容.为什么这不像JS中的onClick()更像?似乎将UIButton连接到目标 - 动作对的唯一方法是使用仅出于向后兼容性原因而存在的东西(Selector).

我的用例是在循环中为不同的对象创建UIButtons,然后将每个对象挂钩到一个闭包.(在字典/子类化UIButton中设置标记/查找是脏的半解决方案,但我对如何在功能上执行此操作感兴趣,即此闭包方法)

closures uibutton ios swift

40
推荐指数
6
解决办法
1万
查看次数

使用自定义对象作为词典键

我想使用自定义对象作为Dictionary键,主要是,我有这样的事情:(我不能使用.net 4.0所以我没有元组)

class Tuple<A, B> : IEquatable<Tuple<A,B>>
{
  public A AValue { get; set; }
  public B BValue { get; set; }

  public Tuple(A a, B b){ AValue = a; BValue = b; }

  public bool Equals(Tuple<A, B> tuple)
  {
    return tuple.AValue.Equals(AValue) && tuple.BValue.Equals(BValue);
  }

  public bool Equals(object o)
  {
  return this.Equals(o as Tuple<A,B>);
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我做这样的事情.

  var boolmap = new Dictionary<Tuple<bool, bool>, string>();
  boolmap.Add(new Tuple<bool,bool>(true, true), "A");
  boolmap.Add(new Tuple<bool,bool>(true, false), "B");
  boolmap.Add(new Tuple<bool,bool>(false, true), "C");
  boolmap.Add(new Tuple<bool,bool>(false, false), "D"); …
Run Code Online (Sandbox Code Playgroud)

c#

26
推荐指数
2
解决办法
4万
查看次数

故事板中的UIViewController自定义初始化

我试着找到一些相关的问题,却无法得到任何东西,希望有人可以提供帮助.

我在故事板上设置了一些UIViewController.然后我想在代码中加载一个视图控制器并将其推送到导航堆栈.我想出正确的方法是使用

instantiateViewControllerWithIdentifier

这个调用init(coder: NSCoder),一切都很好,我的程序工作,但我希望能够有一个自定义初始化程序,为我的视图控制器设置一些变量.考虑以下:

class A : UIViewController {   

  let i : Int

  required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    // property self.i not initialized at super.init call   
  }

}
Run Code Online (Sandbox Code Playgroud)

我显然得到一个错误,因为i需要在创建对象时指定.对此有何解决方案?我对以后声明和配置它并不感兴趣,i因为var它失败了,我不再拥有i不可变的编译器保证.

澄清编辑

假设我有一个当前加载的ViewController变量i.该值是可变的并且可以改变.现在假设从这个ViewController我想呈现另一个,并用它初始化它i.

class ViewController: UIViewController {

   var i : Int

   // ... other things

  // in response to some button tap...
  @IBAction func tappedButton(sender: AnyObject) {
    let st = UIStoryboard(name: "Main", bundle: …
Run Code Online (Sandbox Code Playgroud)

uiviewcontroller ios swift

18
推荐指数
3
解决办法
1万
查看次数

删除git子模块的问题

我有一个关于删除git子模块的问题.我正在使用git组织我的配置文件和vim包,将vim包作为子模块.现在我正在尝试删除一个子模块(根据这里的说明,但我没有成功.

--git submodule deinit -f vim/bundle/snipmate-snippets
Submodule work tree 'vim/bundle/snipmate-snippets' contains a .git directory
(use 'rm -rf' if you really want to remove it including all of its history)
Run Code Online (Sandbox Code Playgroud)

所以我试试rm -rf......

--git rm -rf vim/bundle/snipmate-snippets
error: the following submodule (or one of its nested submodules)
uses a .git directory:
    vim/bundle/snipmate-snippets
(use 'rm -rf' if you really want to remove it including all of its history)
Run Code Online (Sandbox Code Playgroud)

我做错了什么?显然只是rm -rf像git一样告诉我不够好,因为.gitmodules文件中的子模块条目将保留.谢谢.

git

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

Codility Peaks复杂性

我刚刚完成了以下Codility Peaks问题.问题如下:


给出了由N个整数组成的非空零索引数组A. 峰值是一个比其邻居更大的数组元素.更确切地说,它是指数P,使得0 <P <N-1,A [P-1] <A [P]和A [P]> A [P + 1].例如,以下数组A:

A[0] = 1
A[1] = 2
A[2] = 3
A[3] = 4
A[4] = 3
A[5] = 4
A[6] = 1
A[7] = 2
A[8] = 3
A[9] = 4
A[10] = 6
A[11] = 2
Run Code Online (Sandbox Code Playgroud)

有三个峰:3,5,10.我们想把这个数组分成包含相同数量元素的块.更确切地说,我们想要选择一个能产生以下块的数字K:A [0],A [1],...,A [K-1],A [K],A [K + 1], ...,A [2K - 1],... A [N - K],A [N - K + 1],...,A [N - 1].更重要的是,每个块应包含至少一个峰值.请注意,块的极端元素(例如A [K-1]或A [K])也可以是峰值,但前提是它们同时具有两个邻居(包括相邻块中的一个).目标是找到阵列A可以划分的最大块数.数组A可以分为以下块:

一个街区(1,2,3,4,3,4,1,2,3,4,6,2).该块包含三个峰.

两个块(1,2,3,4,3,4)和(1,2,3,4,6,2).每个街区都有一个高峰.

三个块(1,2,3,4),(3,4,1,2),(3,4,6,2).每个街区都有一个高峰. …

algorithm

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

Python map函数,通过引用/值传递?

我对mapPython中的函数有疑问.

根据我的理解,该函数不会改变它正在运行的列表,而是创建一个新的并返回它.它是否正确 ?

另外,我有以下代码

def reflect(p,dir):
  if(dir == 'X'):
    func = lambda (a,b) : (a * -1, b)
   else:
    func = lambda (a,b) : (a, b * -1)
  p = map(func,p)
  print 'got', p
Run Code Online (Sandbox Code Playgroud)

points 是一个元组数组,如: [(1, 1), (-1, 1), (-1, -1), (1, -1)]

如果我以这种方式调用上述函数:

print points
reflect(points,'X')
print points
Run Code Online (Sandbox Code Playgroud)

列表points不会改变.但是在功能内部,打印功能可以正确打印出我想要的内容.

有人可能指点我在某个方向,我可以学习如何通过值/参考等传递如何在python中工作,以及我如何解决上述问题?或许我在努力模仿Python中的Haskell ......

谢谢

编辑:

说而不是p = map(func,p)

for i in range(len(p)):
  p[i] = func(p[i])
Run Code Online (Sandbox Code Playgroud)

列表的值在函数外部更新,就像通过引用一样工作.呃,希望这很清楚:S

python

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

在闭包中使用数组时Swift EXC_BAD_ACCESS

考虑以下玩具示例Swift代码:

protocol Testable{}
class MyObj : Testable{}

class Test {

    var arr:[Testable] = []
    var didRun:Bool = false

    func run() -> [Testable]{
        if(didRun){
            println("arr has \(arr.count) elements")
            for e in arr{  // following access causes EXC_BAD_ACCESS
                println(e)
            }

            return arr
        } else{
            provider({ (myArr : [AnyObject]) -> () in
                self.arr = myArr as [MyObj]
                self.didRun = true
                })
            return []
        }
    }

    func provider( cb : ([AnyObject] -> ()) ){
        let a:[MyObj] = [MyObj(),MyObj(),MyObj()]
        cb(a)
    }
}
Run Code Online (Sandbox Code Playgroud)

并按以下方式调用它:

 let t …
Run Code Online (Sandbox Code Playgroud)

closures swift

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

我可以为变量分配静态类吗?

我的问题是我是否可以将静态类分配给另一个变量(以及它将是什么类型)?

说我有

public static class AClassWithALongNameIDontWantTotType{
    public static bool methodA() { stuff }
}
Run Code Online (Sandbox Code Playgroud)

然后我有

class B{

}
Run Code Online (Sandbox Code Playgroud)

我可以这样做,以便class B我可以将这个类重新分配给名称较短的内容,例如:

SomeType a = AClassWithALongNameIDontWantTotType
Run Code Online (Sandbox Code Playgroud)

然后能够做到

a.methodA()
Run Code Online (Sandbox Code Playgroud)

我可以通过做类似的事情来获得一个功能

Func<bool> a = AClassWithALongNameIDontWantTotType.methodA() 
Run Code Online (Sandbox Code Playgroud)

但我更愿意拥有全班.

谢谢!

c#

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

MaybeT的这种特殊用途如何运作?

我正在尝试了解monad变换器,我正在阅读haskell wiki上的这个页面.

我困惑的代码如下:

isValid :: String -> Bool
isValid s = length s >= 5

getValidPassword :: MaybeT IO String
getValidPassword = do s <- lift getLine
                      guard (isValid s)
                      return s

askPassword :: MaybeT IO ()
askPassword = do lift $ putStrLn "Insert your new password:"
                 value <- getValidPassword
                 lift $ putStrLn "Storing in database..."
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.我可以运行它,它的工作原理.但现在,askPassword改为:

askPassword :: MaybeT IO ()
askPassword = do lift $ putStrLn "Insert your new password:"
                 value <- msum $ …
Run Code Online (Sandbox Code Playgroud)

haskell

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

如何写一个类型为`[(a,b)] - >([a] - > [a]) - > [(a,b)]的函数

我有一个关联列表

L :: [(a,b)]
Run Code Online (Sandbox Code Playgroud)

每个a都与a相关联b.

b只是额外的信息,而有趣的部分是a.

我想合作a,所以我有一个f类型的功能[a] -> [a].(在我的问题中,我实际上有[a] -> [[a]],所以如果你的答案会推广到我可以遍历的任何容器,这将是好的.

我想我需要类似的东西

[(a,b)] -> ([a] -> T a) -> T (a,b)
Run Code Online (Sandbox Code Playgroud)

哪个T是我可以穿越的容器.这个函数基本上重新排列了a它的周围,它没有创建新的,或删除任何东西.

我似乎已经得到停留在什么是运行最惯用的方式fa部分[(a,b)],并在最后附上回b.

我想在最后使用Data.Map简单的查找,但我想知道是否有更好的方法来做我正在做的事情,不知何故"沿线" b与其余的计算一起.

如果没有,你能解释一下原因吗?

显而易见的另一种方法是重写,f但我不希望因为f不关心b.

非常感谢您的帮助.

haskell

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

标签 统计

swift ×3

c# ×2

closures ×2

haskell ×2

ios ×2

algorithm ×1

git ×1

python ×1

uibutton ×1

uiviewcontroller ×1