我发现strip!
和chomp!
(以及其他类似方法)在字符串未更改时返回nil
。这显然禁止将这些方法合并为一行:
s = 'a' # => "a"
s.strip!.chomp!(',')
# => NoMethodError: undefined method `chomp!' for nil:NilClass
所以我似乎被迫每行写一个:
s.strip! # => nil
s.chomp!(',') # => nil
这是唯一的方法还是我错过了什么?
答案 0 :(得分:4)
您可以使用这些方法的非变异版本:
TransitionManager
你可以使用分号(但通常味道很差):
class NavigationControllerDelegate: NSObject, UINavigationControllerDelegate {
let transitionManager = TransitionManager()
func navigationController(navigationController: UINavigationController, animationControllerForOperation operation: UINavigationControllerOperation, fromViewController fromVC: UIViewController, toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
if operation == .Push {
return transitionManager
}
return nil
}
}
答案 1 :(得分:4)
这看起来像tap可能是一个有用的工具:
s.tap {|t| t.strip!}.chomp!
答案 2 :(得分:0)
R = /
^\s+ # match >= 1 whitespace at the beginning of string
| # or
,\s*$ # match comma then >= 0 whitespace at the end of the line
| # or
\s+$ # match >= 1 whitespace at the end of the line
/x
def clean(s)
s.gsub!(R,'') || s
end
在以下所有情况中,返回值为"ab"
,这也是字符串的新值:
clean ' ab '
clean ' ab,'
clean ' ab, '
clean 'ab,'
clean 'ab'