日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

podfile文件用到的Ruby语言的学习和使用

發(fā)布時(shí)間:2023/12/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 podfile文件用到的Ruby语言的学习和使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

序言

在我們的iOS開(kāi)發(fā)中,現(xiàn)在的cocoapods已經(jīng)是事實(shí)上的添加第三方庫(kù)的標(biāo)準(zhǔn)方式了.在cocoapods中的podfile文件就是利用Ruby語(yǔ)言寫(xiě)的一款DSL(Domain Specific Language,領(lǐng)域特定語(yǔ)言).

Ruby簡(jiǎn)介

在Ruby的維基百科Ruby(翻墻才能訪問(wèn))上的說(shuō)明:Ruby 是一種面向?qū)ο?、命令式、函?shù)式、動(dòng)態(tài)的通用編程語(yǔ)言。 在20世紀(jì)90年代中期由日本電腦科學(xué)家松本行弘(Matz)設(shè)計(jì)并開(kāi)發(fā)。 遵守BSD許可證和Ruby License。 它的靈感與特性來(lái)自于Perl、Smalltalk、Eiffel、Ada以及Lisp語(yǔ)言。

在Ruby中,一切都是對(duì)象,連在其它語(yǔ)言中的基本類型在Ruby中都是對(duì)象.例如對(duì)于數(shù)字1 ,它也是對(duì)象,我們可以 1.methods 來(lái)調(diào)用1這個(gè)對(duì)象的methods方法,它沒(méi)有所謂的運(yùn)算的概念,1+1其實(shí)是1.+(1)就是1這個(gè)對(duì)象的+方法

在MAC系統(tǒng)中,已經(jīng)內(nèi)置了Ruby了,所以我們不需要額外安裝就可以使用.

這里有兩個(gè)在線運(yùn)行Ruby的網(wǎng)頁(yè),在我們只想驗(yàn)證一些簡(jiǎn)單的Ruby調(diào)用的時(shí)候,比較方便w3cschool Ruby

常用結(jié)構(gòu)的語(yǔ)法

字符串

用雙引號(hào)"字符串內(nèi)容",這種方式創(chuàng)建的字符串中可以通過(guò) #{變量/表達(dá)式}的方式來(lái)嵌入表達(dá)式.在生成的時(shí)候,這個(gè)表達(dá)式會(huì)被計(jì)算
例如

a = 1 puts "a = #{a}" #=> a = 1

單引號(hào)’字符串內(nèi)容’來(lái)創(chuàng)建字符串

符號(hào)

這玩意,相對(duì)于其他語(yǔ)言來(lái)說(shuō)是比較特別的,在Ruby中,字符串是個(gè)對(duì)象,定義的兩個(gè)字符串"a" 和另一個(gè)地方定義的"a",其內(nèi)存地址是不一樣的,這個(gè)在我們的OC中,它是常量字符串,會(huì)被系統(tǒng)直接存放在常量區(qū),他們的地址啥的都是一樣的.
但在Ruby中,是不同的.那怎么實(shí)現(xiàn)OC中那樣的常量字符串呢? 在Ruby中就是 符號(hào)!!! 創(chuàng)建一個(gè) Symbol 對(duì)象的方法是在名字或者字符串前面加上冒號(hào):

a = :symbol b = :symbol puts "a.object_id is #{a.object_id}" #=> a.object_id is 800668 puts "b.object_id is #{b.object_id}" #=> b.object_id is 800668 as = "symbol" bs = "symbol" puts "as.object_id is #{as.object_id}" #=> as.object_id is 70321994713700 puts "bs.object_id is #{bs.object_id}" #=> bs.object_id is 70321994713680

數(shù)組

常用的創(chuàng)建數(shù)組的方式有 語(yǔ)法糖[] 和 Array.new

nums = [1,2,3,4,5] p nums #=> [1,2,3,4,5] a = Array.new p a #=> [] a = Array.new(5) p a #=> [nil,nil,nil,nil,nil] a = Array.new(5,0) p a #=> [0,0,0,0,0]

new方法的第一個(gè)參數(shù)是個(gè)數(shù),第二個(gè)參數(shù)是默認(rèn)值,如果沒(méi)有,則元素都會(huì)被初始化為nil.

通過(guò) []索引來(lái)獲取數(shù)組,同OC等語(yǔ)言不同的是,這里的索引值可以是負(fù)數(shù),負(fù)數(shù)表示從數(shù)組尾部開(kāi)始獲取元素 ,還可以超過(guò)數(shù)組的大小,只是這個(gè)時(shí)候,會(huì)返回nil,所以在Ruby中就沒(méi)有所謂的越界的概念了

nums = [1,2,3,4,5] puts nums[2] #=> 3

字典/散列

在Ruby中,叫法是散列,對(duì)應(yīng)的就是OC中的字典(NSDictionary)
創(chuàng)建的方式 ,直接使用 {鍵 => 值,|鍵 => 值|} ,當(dāng)然了,如果用符號(hào)做鍵,可以用 {鍵: 值,|鍵 : 值|}

h1 = {"key1" => "1","key2" => "2"} key1 = :key1 key2 = :key2 # 這里 用符號(hào),:號(hào)要和符號(hào)在一起,分開(kāi)就報(bào)語(yǔ)法錯(cuò),也是醉了{(lán)key1 : "1",key2 : "2"}是錯(cuò)的 h2 = {key1: "1",key2: "2"} puts h1 #=> {"key1"=>"1", "key2"=>"2"} puts h2 #=> {:key1=>"1", :key2=>"2"}

另一種方式是Hash.new

h = Hash.new; h["key1"] = "1" p h["key1"] #=> "1"

條件判斷

語(yǔ)法格式

if 條件 then處理 end #其中的then可以省略

還有帶有多個(gè)else的

if 條件 then處理 elsif 條件 then處理 else 處理 end # 其中的then也是可以省略的

在Ruby中,還多了個(gè)和if相對(duì)的unless.if的條件是滿足就執(zhí)行,unless是條件不滿足就執(zhí)行
也就是 unless其實(shí)相當(dāng)于 if !條件

case 語(yǔ)句

case 比較對(duì)象 when1 then處理1 when2 then處理2 else 處理3 end

方法/函數(shù)定義

def funName(parm1,parm2 ,.....)函數(shù)體 end

舉個(gè)實(shí)際的例子

def subDirctory(rootDirectPath)subArr = []Dir::foreach rootDirectPath do |filename| if filename != "." and filename != ".." and !filename.start_with?(".")sub = "#{rootDirectPath}/#{filename}"if File.directory?(sub) puts "#{sub} is directory"subArr << filenameend endendreturn subArr end#獲取xcodeproj文件路徑和target def projectInfo(projectArr,prefix)projects = []projectArr.each { |subDirect|modulesProjs = Dir.glob("#{subDirect}/*.xcodeproj") projects << modulesProjs}projects.each { |project|projectName = File.basename project, extnputs projectName} endpath = "./xcodeproj-1.6.0" subArr = subDirctory(path) puts subArr

從這個(gè)實(shí)際例子,我們可以知道, 方法的調(diào)用 方法名(參數(shù))的方式.這里的括號(hào)是可以省略的!!!
也就是

subArr = subDirctory path

當(dāng)然了,函數(shù)還可以帶上默認(rèn)值等等,在此不再贅述.

記錄的一些小內(nèi)容

輸出一個(gè)對(duì)象支持的方法

p project_reference.methods methods方法,可以輸出一個(gè)對(duì)象能夠支持的所有的方法

打印日志到控制臺(tái)

print –不會(huì)換行 puts –會(huì)換行

打印對(duì)象的類型

puts project_reference.class

在ruby中,可能會(huì)看到如下的方法
products_group.children << ref
這個(gè)是普通的方法 <<,默認(rèn)一般都是給數(shù)組添加一個(gè)到末尾

a = ["orange"] a << "apple" puts a gives this["orange", "apple"] result.

ruby中引入其它的庫(kù),或者文件,類似于inclue

require_relative 'generator/render’

這個(gè)是在當(dāng)前目錄下尋找某個(gè)rb文件!

ruby中,對(duì)于一個(gè)數(shù)組,有 map,collect,select,reject四個(gè)方法,這四個(gè)方法,在帶有block的時(shí)候,可以用來(lái)返回一個(gè)新的數(shù)組,這個(gè)數(shù)組是block中方法的執(zhí)行結(jié)果
例如

framework_buildphase = project.objects.select{|x| x.class ==Xcodeproj::Project::Object::PBXFrameworksBuildPhase}[0];

這里是要取數(shù)組中class是PBXFrameworksBuildPhase的數(shù)組,然后取第一個(gè)

ruby中優(yōu)雅的幾個(gè)符號(hào):
||=
@foo ||= 1 的意思是,如果 foo 屬性還沒(méi)賦值,則賦為1,否則保留原來(lái)的值。這在一些“如果你不給我個(gè)初始值,我就算出一個(gè)初始值”的地方會(huì)很有用
像數(shù)組用這個(gè)就很方便

config.build_settings['HEADER_SEARCH_PATHS'] ||= "$(inherited)

意思是 如果.build_settings[‘HEADER_SEARCH_PATHS’]這個(gè)數(shù)組中有值,那么就保留原來(lái)的,沒(méi)有的話,就賦值為 "$(inherited) “

<<

config.build_settings['HEADER_SEARCH_PATHS'] << "yohunl/cddr/path”

意思是追繳,相當(dāng)于調(diào)用數(shù)組的append方法!!

總結(jié)

以上是生活随笔為你收集整理的podfile文件用到的Ruby语言的学习和使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。